网站制作风格,深圳住房城乡建设局网站首页,北京网站建设哪家好天,个性化推荐网站开发源码相关系列 深入理解JVM垃圾收集器-CSDN博客 深入理解JVM垃圾收集算法-CSDN博客 深入理解jvm执行引擎-CSDN博客 jvm优化原则-CSDN博客 jvm流程图-CSDN博客 三色标记产生的原因#xff1f;
在并发标记的过程中#xff0c;因为标记期间应用线程还在继续跑#xff0c;对象间的引… 相关系列 深入理解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 {}