0
点赞
收藏
分享

微信扫一扫

服务器硬件基础知识解析

今天你读书了吗 04-09 10:00 阅读 1

三色标记产生的原因?

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

三色标记定义

三色标记算法是根据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 {

}
举报

相关推荐

0 条评论