3回复
7月前
CMS 到底是标记“存活”对象还是“死亡”对象
CMS 到底是标记“存活”对象还是“死亡”对象,相应的源码在哪,想求证一下。
可达性分析结束后,每个对象是否垃圾,应该要有个标识区分吧?还是说把存活对象都记录下来?
758 阅读
CMS 到底是标记“存活”对象还是“死亡”对象,相应的源码在哪,想求证一下。
可达性分析结束后,每个对象是否垃圾,应该要有个标识区分吧?还是说把存活对象都记录下来?
可达性分析一定是标记的“存活”对象,如果一个对象被标记为存活,那么对于不同的垃圾收集器会采取不同的操作,甚至是同一个垃圾收集器在不同的阶段也会对存活对象采取不同的操作,如CMS的标记-清除算法是直接在对象头中标记此对象存活即可,但是对于年轻代的复制算法来说,会将存活对象移动到Survivor区,然后还需要在原旧的对象上设置转发指针。
如果是HotSpot,这些涉及到的源代码比较多,位置有时候也分散一些,可以选择某个垃圾回收器,通过调试的方式一步步查找
都是标记存活对象的