关于JVM-三色标记算法剖析

相关系列

深入理解JVM垃圾收集器-CSDN博客

深入理解JVM垃圾收集算法-CSDN博客

深入理解jvm执行引擎-CSDN博客

jvm优化原则-CSDN博客

jvm流程图-CSDN博客

三色标记产生的原因?

在并发标记的过程中,因为标记期间应用线程还在继续跑,对象间的引用可能发生变化,就会产生多标和漏标的情况,为了解决这个问题便引入三色标记算法。

三色标记定义

三色标记算法是根据GC roots可达性分析遍历对象过程中遇到的对象,按照“是否访问过”这个条件标记成以下三种色:

  • 白色:表示对象未被垃圾收集器访问过,这是可达性分析开始的阶段,所有的对象都是白色,如果分析结束阶段,还是白色,即代表不可达。
  • 灰色:表示对象被垃圾收集器访问过,但是至少还有一个引用没有被扫描过。
  • 黑色:表示对象已被垃圾收集器访问过了,并且这个对象所有对象都被扫描过了,它是安全存活的,如果有其它对象引用指向了黑色对象,无须重新扫描一遍。黑色对象不可能直接指向某个白色对象。

案例分析

 程序代码

package com.dzend.mall.order;

public class ThreeColorRemark {
    public static void main(String[] args) {
        ClassA classA = new ClassA();
        ClassD classD = classA.classB.classD;
        classA.classD = classD;
    }
}

class ClassA {
    ClassB classB = new ClassB();
    ClassD classD = null;
}

class ClassB {
    ClassC classC = new ClassC();
    ClassD classD = new ClassD();
}
class ClassC {

}
class ClassD {

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值