求助>CMS 到底是标记“存活”对象还是“死亡”对象>
3回复
1月前

CMS 到底是标记“存活”对象还是“死亡”对象



CMS 到底是标记“存活”对象还是“死亡”对象,相应的源码在哪,想求证一下。

可达性分析结束后,每个对象是否垃圾,应该要有个标识区分吧?还是说把存活对象都记录下来?

646 阅读
请先登录,再评论

都是标记存活对象的

1月前

hotspot 里所有的回收器,都是可达性回收算法,标记的是存活对象,只是不同的回收器回收策略不同。比如CMS老年代是清除算法,那就是标记存活,然后遍历回收没被标记存活的对象

1月前

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

1月前