GC的代机制

1、为CLR垃圾回收器采用的一种机制,基于以下几点假设:对象越新,生存期越短;对象越老,生存期越长;

2、托管堆仅支持3代(GC.MaxGeneration,第0代、第1代、第2代),CLR初始化会为每一代分配容量预算,可自调节的,即根据应    用程序的行为调整分配容量预算,容量预算用于触发垃圾回收。 
3、 GC从0代开始,分配新对象导致第0代容量超过预算,垃圾回收必须启动:1、检查后面每一代的容量,根据是否已达到每代的预算决定是否检查该代;2、回收根不可达的对象,压缩内存,幸存者往后移一代;3、一次垃圾回收,0代暂时清空,接收新对象;4、垃圾回收,CLR会线程劫持、即其他的线程会被挂起。
4、终结对象(实现Finalize方法:允许对象在回收之前尝试释放资源并执行其他清理操作回收过程至少经历两代:1、终结对象初始时CLR会将其插入终结列表;2、根不可达后一次的垃圾回收,将其移出终结列表插入freachable队列,根变可达,即对象复活,提升到下一代;3、freachable中存在对象,则有一特殊的线程苏醒,调用对象finalize方法并将对象移除freachable,对象变不可达。
原文地址:https://www.cnblogs.com/jueye/p/3145725.html