三色标记算法

三色标记算法用于CMS并发标记过程中,将对象标记为白色、灰色和黑色以避免STW。然而,此算法存在浮动垃圾和漏标问题。增量更新机制尝试解决这些问题,但仍有不足。G1通过引用堆栈处理漏标,而ZGC采用颜色指针技术,从对象地址中预留位来标记状态,有效避免问题。ZGC最大可管理内存为2的42次方字节,约4TB。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是三色标记

CMS的运行过程中存在并发标记过程,由于不产生STW,所以对垃圾的清理必须存在标记和删除两个过程分开。而不能看到是垃圾就直接清除。否则会引起不必要的麻烦。CMS为了解决这个问题,采用了三色标记算法来记录对象是否已经被扫描过(不是确认为垃圾)。

CMS将对象的标记分为三种颜色,这个颜色只是逻辑上的颜色,在内部存在一个只允许JVM程所修改的两位标记,01代表黑色,10代表灰色,00代表白色。

白色标记:由于遍历过程需要时间,还没有来得及标记的对象为白色。并且最后垃圾也会被标记为白色。

灰色标记:由于一个对象内部有很多成员变量,已经确定该对象不是垃圾而其成员变量并未被扫描,该种对象为灰色对象。

黑色标记:已经确定该对象不是垃圾而且其成员变量已全部被扫描,该种对象为黑色对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值