学习记录:垃圾收集器--CMS和G1

关于三色标记算法

白色:初始阶段所有的对象都是白色。在可达性分析后如果还是白色就表示可以被回收。

灰色:垃圾收集器扫描过该对象,但这个对象还有至少一个引用没有被扫描过

黑色:垃圾收集器扫描过该对象,且扫描过这个对象的所有引用。黑色代表这个对象被扫描过,且是存活的,如果有其他对象引用指向黑色对象,则无需重新扫描。黑色对象不可直接指向某个白色对象。一个对象只有被黑色对象引用才能存活。

上面这个图展示了GC线程标记后用户线程又修改了引用关系。上面的情况是:灰色对象1到白色对象3的引用被切断。同时已经扫描过的黑色对象2建立了和白色对象3的关系。这种情况非常危险,因为黑色对象2不会被重新扫描,导致实际存活的对象3被认为是死亡。

在1994年Wilson在理论上证明了,当且仅当以下两个条件同时满足时,会产生“对象消失”的问题,即:应该是黑色的对象被误标记为白色。

  1. 赋值器插入了一条或多条从黑色对象到白色对象的新引用

  2. 赋值器删除了全部从灰色对象到该白色对象的直接或间接引用

因此要解决并发标记时对象消失问题,只需要破坏这两个条件的任意一个即可。由此产生了两个方案:

  1. 增量更新(Incremental Update):破坏第一个条件。当黑色对象被插入指向白色对象的引用关系时,就将黑色对象记录下来,等并发标记结束之后,再以黑色对象为根重新扫描。也可以简单理解为:只要被插入指向白色对象的引用,黑色对象就变成了灰色对象。

  2. 原始快照(Snapshot At The Begining):破坏第二个条件。当灰色对象要删除指向白色对象的引用关系时,将这个引用关系记录下来。在并发标记结束之后,再以这些记录下来的引用关系中的灰色对象为根,重新扫描一次。可以简化理解为:在引用关系删除的那一刻,将引用关系以快照的方式存下来 ,之后再进行搜索。

CMS使用的是增量更新;G1使用的是原始快照。

三色算法参考文章:百度安全验证https://baijiahao.baidu.com/s?id=1719715247743913571&wfr=spider&for=pc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值