代码改变世界

每天学习一点.net(6) GC的原理 两步回收、代。

2013-06-19 23:30  黑眼圈Mars  阅读(272)  评论(0)    收藏  举报

今天仔细看了GC的一章。

总结一下,整个GC的回收过程可以分为两步和三代。

两步是指 1 标记(marking) GC遍历所有线程栈,标记所有线程栈中的根(指向堆元素,类、数组等等)。2 遍历堆中所有未被标记的对象,然后进行碎片整理(compact)。

三代是指 0代、1代、2代。一次垃圾回收后,0代中不包含任何对象,对象要么被回收,要么进入1代。只有1代满了以后,才会进入2代。2代对象,至少经过了两次垃圾回收得检查。

进行2代回收时,必定进行0代和1代回收。进行1代回收时,必定进行0代回收。

 

一般大对象(>=84000bytes)的回收是在2代回收中进行的。