简单分配期间的垃圾收集

时间:2018-07-03 21:50:39

标签: c# garbage-collection

因此,在某些代码中,我一直在追踪我认为过多的GC。我最终将其归结为以下代码,该代码显示了我所看到的内容:

object[] ret = new object[40000000];
for (int i = 0; i < 40000000; i++)
{
    ret[i] = new object();
}

在运行该循环时,我看到了数十个垃圾收集Gen1事件。有人对这是为什么有很好的了解吗?填充此数组时会清除哪些不再引用的对象?

以下是图片,供您参考:https://imgur.com/a/z3PBtou

在丢失对创建的对象的引用之前,我不会期望发生任何GC。也许我今天已经死了,或者我缺少一些基本概念,但这对我来说很好奇。

谢谢!

1 个答案:

答案 0 :(得分:2)

仅仅因为它运行了gen1并不意味着它收集了任何东西,而是意味着它尝试了(正是因为您分配了很多对象!)。直到尝试才知道它是否会成功。

  

在丢失对我创建的对象的引用之前,我不希望发生任何GC。

不, GC 收集不可访问的对象,但是它会在适当的时候运行(运行(例如,基于分配-或由于操作系统的外部内存压力)。