关于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 { }
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...