JVM的三色标记

什么是三色标记

三色标记是指垃圾收集器在进行可达性分析时,用白、黑、灰来标记对象状态的一种机制。其中白色表示该对象还没有被标记过;灰色表示这个对象被垃圾收集器访问过,但是对象内部的引用还没有完全被扫描过;黑色表示这个对象以及这个对象内部的引用都被扫描过。扫描结束后状态还是白色的对象便是要被清理的对象。

三色标记的缺点

并发环境下会出现多标和漏标问题,多标就是已经将某个对象标记为灰色但是用户线程又放弃了该对象。漏标是在扫描后某个黑色对象又引用了白色对象,导致了漏标发生。

如何解决漏标问题:增量更新或者原始快照

增量更新:记录扫描时在黑色对象中重新插入白色对象的情况,扫描后再将这些黑色对象作为根节点重新扫描
原始快照:当灰色对象要删除白色引用关系时,要将这些情况记录下来,本次扫描后再进行一次扫描标记

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容