所以我在我的一些代碼中追蹤我認為過度的 GC。我最終將其歸結為這段代碼,顯示了我所看到的內容:object[] ret = new object[40000000];for (int i = 0; i < 40000000; i++){ ret[i] = new object();}在運行該循環時,我看到了數十個 Garbage Collection Gen1 事件。有沒有人很好地理解這是為什么?在填充這個數組時,它清理了哪些不再被引用的對象?這是更多參考圖片:https : //imgur.com/a/z3PBtou在我丟失對我創建的對象的引用之前,我不希望發生任何 GC。也許我今天腦子進水了,或者我遺漏了一些基本概念,但這對我來說似乎很好奇。謝謝!
1 回答

慕萊塢森
TA貢獻1810條經驗 獲得超4個贊
僅僅因為它運行了 gen1 并不意味著它收集了任何東西——這意味著它嘗試了(正是因為你分配了很多對象!)。它不知道,直到它嘗試,它是否會成功。
在我丟失對我創建的對象的引用之前,我不希望發生任何 GC。
不; GC收集無法訪問的對象,但它會在合適的時候運行(例如,基于分配 - 或由于來自操作系統的外部內存壓力)。
- 1 回答
- 0 關注
- 154 瀏覽
添加回答
舉報
0/150
提交
取消