CMS三色标记之为什么存在灰色

CMS的三色标记包括白色、黑色和灰色,分别代表未扫描、完全扫描和部分扫描。灰色在并发清除阶段扮演关键角色,避免节点重复扫描和时间片浪费。由于并发执行的特性,灰色标记是必要的。

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

CMS的三色标记,我想大家都不陌生了吧(不会有人不懂吧😁)

三色标记

三色标记,分为白色,黑色,灰色。每种颜色代表的是不同的含义。

白色代表,此节点还没有被gc给扫描过。
黑色代表,此节点已经扫描完毕。
灰色代表,此节点只是别扫描了一部分,未完全扫描完。

为什么不是两色标记,而是三色标记,这个灰色能不能去掉?

首先这个灰色是不能去掉滴。众所周知CMS的过程分为:初始标记,并发标记,重新标记,并发清除。
这个问题就是出在并发清除这一步,并发清除是垃圾收集线程和用户线程并发执行,因为是并发,所以就会出现cpu的争夺。这个时候就涉及到cpu的时间片轮转了。
如果到gc正在扫描一个节点的时候,扫描到一半的时候,cpu的时间片到期,这时gc扫描只能先停下来,这个时候问题来了,这个节点标位什么颜色呢?
肯定是不能标为黑色的,因为此节点还没有扫描完,如果标为白色,那么下次时间片的时候,此节点又要重新扫描了,会造成时间片的浪费。因此这个时候就需要灰色了,将节点定义为灰色,下次时间片到达时,接着扫描节点就行。

笔者的见解可能有着不足之处,还望大佬们不吝赐教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值