三色标记算法

三色标记算法

黑色: 自身和子对象都已标记的对象
灰色: 自身已标记,子对象还没标记的对象
白色: 未标记的对象

在这里插入图片描述

三色标记注意事项:

浮动垃圾:本应被回收的垃圾依然让它存活
	如图所示,C已经被标记为灰色,表示非垃圾,但由于是并发标记,之后A可能已经断开了对C的引用,C应该被当作垃圾回收。这就是浮动垃圾。问题不大,只是多活了一轮GC,下次依然会被回收。
	
漏标情况:将不是垃圾的对象,当作垃圾回收了
	在运行态中,1、黑色对象指向了白色对象,2、并且同时,灰色对象取消了白色对象的引用。就会产生白色对象漏标的情况。因为黑色对象已经标记完毕,不会再去扫描,并且也没有灰色对象的指向,所以漏标了

标题漏标的应对方法

增量更新(Incremental update):关注引用的增加。如果发现黑丝A指向了白色D,将黑色A重新标记为灰色,remake过程中重新扫描。这种处理方式会造成重复扫描的情况。(CMS的处理方式)
SATB(snapshot at the begining):关注引用的删除,当灰色对象B断开对D的引用后,将这个引用推倒GC的堆栈中,保证白色对象D还能被扫描到,(G1的处理方式)在扫描时拿到这个引用,由于有RSet的存在,不需要扫描整个对去查找指向白色的引用,效率比较高。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值