美文网首页
三色标记法

三色标记法

作者: 糯米团子123 | 来源:发表于2022-10-17 18:21 被阅读0次
  1. 根据可达性分析找出存活对象,从GC Roots开始遍历访问。
  2. 将遇到的对象按是否访问过分三个颜色(黑白灰)
    2.1 白色:尚未访问
    2.2 黑色:表示当前对象已经被访问,且当前对象直接引用的其他对象也都被访问了。(当前对象及其所有直接可达对象都被访问)
    2.3 灰色:表示当前对象已经被访问,但是当前对象直接引用的对象尚未完全访问到,全部访问后变为黑色。(当前对象直接可达对象没有全部被访问)


    三色标记
  3. 一次完整的三色标记
    3.1 初始 所有对象都是白色
    3.2 将GC Roots的直接引用对象移到【灰色集合】中
    3.3 从【灰色集合】中获取对象,将当前对象引用到的对象移动到【灰色集合】中,将当前对象移动到【黑色集合】中
    3.4 重复步骤3,直到【灰色集合】为空
    3.5 结束后(【灰色集合】为空),仍然在【白色集合】中的对象就是GC Roots不可达对象,可以进行回收。
  4. 产生问题
    4.1 浮动垃圾:垃圾回收线程暂停,业务线程继续,B对象指向D对象的引用消失,D变成垃圾,可以回收D(由于浮动垃圾的存在,因此CMS不建议内存满了在回收,可以配置达到总空间的百分之n的时候进行回收)。


    浮动垃圾

4.2 漏标:垃圾回收线程暂停,业务线程继续,此时A对象指向D,B对象和D对象之间的引用消失。在此时又继续运行垃圾回收线程,A对象此时在【黑色集合】中,不会被遍历了,B对象在【灰色集合】中,会再次进行标记其所引用的对象,但是这时B、D之间的引用已经消失了,无法寻找到D,因此在标记结束后,D还在【白色集合】中,垃圾回收线程认为D是垃圾将D回收了,业务线程使用D时候产生null。


漏标

相关文章

  • JVM学习12·垃圾回收器以及HotSpot的实现细节

    1.并发标记与三色标记 在三色标记法之前有一个算法叫Mark-And-Sweep(标记清除)。这个算法会设置一个标...

  • 三色标记法与读写屏障

    前言 本文主要介绍了三色标记法的基本思路、多标导致的浮动垃圾、漏标的处理方案(读写屏障)等。 1. 垃圾回收的简单...

  • 三年级数学学习方法的培养

    1,审题。 审题一定要仔细,重要信息做标记。 三色笔记法,黑色,蓝色,红笔。康奈尔笔记法。 ...

  • 垃圾回收器串讲及 HotSpot 的细节实现

    并发标记与三色标记 三色标记 在三色标记法之前有一个算法叫 Mark-And-Sweep(标记清除)。这个算法会设...

  • CMS解决三色标记法漏标问题

    通常采用方案:发生A对象(黑色集合)指向D对象(白色集合)时候,直接将D对象标灰(业务线程运行,一旦发生黑色标记指...

  • 三色标记法

    CMS - 采用方法1 增量更新,关注引用的增加。效率较低,因为其要重新扫描灰色的所有子引用 G1 - 采用方法2...

  • 三色标记法

    背景 相比之前的标记清除算法,其GC执行期间需要把整个程序完全暂停,不能异步执行GC操作。对实时性要求比较高的系统...

  • 三色标记法

    根据可达性分析找出存活对象,从GC Roots开始遍历访问。 将遇到的对象按是否访问过分三个颜色(黑白灰)2.1 ...

  • CMS,G1 垃圾回收器中的三色标记了解吗?

    三色标记算法思想 三色标记法是一种垃圾回收法,它可以让 JVM 不发生或仅短时间发生 STW(Stop The W...

  • lua gc算法(2)

    三色标记法 在前面的双色标记法中,我们可以看到一个对象可以分为白色和黑色。现在引入一个灰色的概念,标记那些已经被扫...

网友评论

      本文标题:三色标记法

      本文链接:https://www.haomeiwen.com/subject/wucvortx.html