简单分配期间的垃圾收集

所以我在我的一些代码中追踪我认为过度的 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。也许我今天脑子进水了,或者我遗漏了一些基本概念,但这对我来说似乎很好奇。


谢谢!


蛊毒传说
浏览 136回答 1
1回答

慕莱坞森

仅仅因为它运行了 gen1 并不意味着它收集了任何东西——这意味着它尝试了(正是因为你分配了很多对象!)。它不知道,直到它尝试,它是否会成功。在我丢失对我创建的对象的引用之前,我不希望发生任何 GC。不;&nbsp;GC收集无法访问的对象,但它会在合适的时候运行(例如,基于分配 - 或由于来自操作系统的外部内存压力)。
打开App,查看更多内容
随时随地看视频慕课网APP