JVM知识之三色标记算法

一、定义

三色标记算法是一种用于垃圾收集的算法,它将内存中的对象分为三种颜色:白色、灰色和黑色。标记完毕后,所有可达对象都为黑色,剩余的白色对象视为不可达,可以被清除。

  • 白色:该对象未被标记,表示垃圾对象
  • 灰色:当前对象被标记为非垃圾对象,但是它的子对象未被扫描
  • 黑色:当前对象被标记为非垃圾对象且它的子对象已被扫描

这种算法的目的是通过可达性分析来识别和回收不再被程序引用的对象,从而释放内存空间。

二、标记过程

找到所有的GC Root,并标记为灰色,然后继续往下扫描,继续向下的节点标记为灰色,上一个节点则从灰色标为黑色,重复该过程。最后标记完毕,所有可达对象都为黑色,剩余的白色对象(未被标记的对象)视为不可达,即垃圾对象,可以被清除掉。

三、优缺点

1、优点

2、缺点

传统的标记方式会伴随STW,所以对象间的引用不会发生改变。而并发标记在标记期间程序依然在运行,对象的引用可能发生改变,就会出现错标和漏标的情况。

(1)错标产生的浮动垃圾

(2)对象漏标问题

四、应用场景

1、CMS标记过程

  • 初始标记:把所有直接引用了GC Root的对象全部标记为灰色;
  • 并发标记:扫描直接引用了灰色对象的对象,并标记为灰色,原灰色对象则标记为黑色;
  • 重新标记:矫正并发标记阶段的错标问题;
  • 并发清除:清除白色对象(未被标记对象)

参考地址:

带颜色的JVM:三色标记详解_三色标记法 为什么要重新标记-CSDN博客

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值