在ASP.Net中,谁能告诉我在哪种情况下从GEN 2垃圾回收器释放了内存?

最佳答案

我认为您的问题的简单答案是,当集合是大对象堆(LOH)时,就会发生垃圾的第二代。当LOH被填充时,它将触发完整的收集,并调用垃圾收集器的Gen2。

因此,如果您的应用程序分配并释放了许多大对象(通常超过100k),那么这也可能是触发点。

您可以参考此MSDN以获得详细信息。

来自Large Object Heap Uncovered


从世代的角度来看,大对象属于第二代
因为只有在第二代时才收集它们
采集。收集了一代后,所有年轻一代
也被收集。例如,当第一代垃圾
发生收集时,将同时收集第1代和第0代。而当
发生第2代垃圾收集,收集整个堆。
因此,第2代垃圾回收也称为
完整的垃圾收集。在本专栏中,我将使用术语“生成”
2个垃圾收集而不是完整的垃圾收集,但是它们是
可互换的。





该图说明了第2代垃圾回收后
您看到Obj1和Obj2已死,我形成了一个自由空间
从以前由Obj1和Obj2占用的内存中
然后用于满足Obj4的分配请求。空间
在最后一个对象Obj3之后,直到该段的末尾仍然可以
用于满足进一步的分配请求。

10-02 04:11