.net 框架中的GC回收机制是这样的,首先GC会通过一个应用对象树形结构来管理所有被应用引用的对象,对于没有被应用引用的对象将被垃圾回收,而其垃圾回收对象的顺序是没有被控制的。GC跑在自己的线程上,其每次运行都会整理堆空间,使未使用的堆空间变得连续。
基于以上机制,对于Finalizers析构来说,其析构执行的时间也是不确定的,所以尽量不要在托管代码中使用Finalize处理析构事宜,但可以析构非托管对象。
Generation标记
由上一垃圾回收后产生的新对象其 Generation 值为0 (收集初始值:256K)
由上一垃圾回收后第一次存活下来的对象其Generation的值为1 (收集初始值:2M)
由两次或以上垃圾回收后存活下来的对象其Generation的值为2 (收集初始值:10M)
0一般可能是 局部变量
1、2一般可能是成员变量 和 全局变量
而GC通过限制检查1、2值的对象的次数来提高回收效率 10%的几率检查1标记的对象,1%的几率检查2标记的对象