关于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 {

}

相关推荐

  1. 关于标记算法

    2024-04-09 10:46:04       50 阅读
  2. 标记算法

    2024-04-09 10:46:04       48 阅读
  3. 标记法详解

    2024-04-09 10:46:04       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 10:46:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 10:46:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 10:46:04       82 阅读
  4. Python语言-面向对象

    2024-04-09 10:46:04       91 阅读

热门阅读

  1. 【WPF应用41】WPF中的Expander控件详解

    2024-04-09 10:46:04       36 阅读
  2. matlab流体仿真

    2024-04-09 10:46:04       36 阅读
  3. webpack打包携带某个文件到dist目录

    2024-04-09 10:46:04       43 阅读
  4. Docker搭建CodiMD

    2024-04-09 10:46:04       36 阅读
  5. Golang 为什么要使用接口

    2024-04-09 10:46:04       41 阅读
  6. Mysql的四种索引实现方式

    2024-04-09 10:46:04       36 阅读
  7. 【C++】STL--list

    2024-04-09 10:46:04       39 阅读