当前位置: 首页 > article >正文

一文讲解CMS收集器的垃圾收集过程

CMS就是Concurrent Mark Sweep
在这里插入图片描述
CMS使用标记-清除算法进行垃圾收集,分为4大步:

  1. 初始标记:标记所有从GC Roots直接可达的对象,这个阶段需要STW,但速度很快
  2. 并发标记:从初始标记的对象出发,遍历所有对象,标记所有可达的对象,这个阶段是并发进行的;
  3. 重新标记:完成剩余的标记工作,包括处理并发阶段遗留下来的少量变动,这个阶段通常需要短暂的STW停顿;
  4. 并发清除:清除未被标记的对象,回收他们占用的内存空间;

那么,再刚刚的过程中,你提到了重新标记,重新标记是怎么执行的?

  • 重新标记remark阶段通常会结合三色标记法来执行,确保在并发标记期间所有存活对象都被正确标记。目的是修正并发标记阶段中可能遗漏的对象引用变化;
  • 在remark阶段,垃圾收集器会停止应用线程STW,以确保在这个阶段不会有引用关系的进一步变化。这种暂停通常很短暂。remark阶段主要包括了以下操作:
    • 处理写屏障记录的引用变化:在并发标记阶段,应用程序可能会更新对象的引用(比如以一个黑色对象新增了对一个白色对象的引用),这些变化通过写屏障记录下来。在remark阶段,GC会处理这些记录,确保所有可达对象都正确地标记为灰色或黑色。
    • 扫描灰色对象:再次遍历灰色对象,处理它们的所有引用,确保引用的对象正确标记为灰色或者黑色。
    • 清理:确保所有引用关系正确处理后,灰色对象标记为黑色,白色对象保持不变。这一步完成后,所有存活对象都应当是黑色的;

刚刚提到了三色标记法,那就顺带普及下

在这里插入图片描述

  • 三色标记法是用于标记对象的存活状态,它将对象分为了三类:

    1. 白色:尚未访问的对象。垃圾回收结束之后,仍然为白色的对象会被认为是不可达的对象,可以回收;
    2. 灰色:已经访问到但未标记完其引用的对象。灰色对象是需要进一步处理的;
    3. 黑色:已经访问到并且其所有引用对象都已经标记过。黑色对象是完全处理过的,不需要再处理;
  • 三色标记法的工作流程是怎样的呢?

    1. 初始标记:从GC Roots开始,标记所有直接可达的对象为灰色;

    2. 并发标记:在此阶段,标记所有灰色对象引用的对象为灰色,然后将灰色对象自身标记为黑色。这个过程是并发的,和应用线程同时进行;

      此阶段的一个问题是,应用线程可能在并发标记期间修改对象的引用关系,导致一些对象的标记状态不准确;

    3. 重新标记:重新标记阶段的目标是处理并发标记阶段遗漏的引用变化。为了确保所有存活对象都被正确标记,remark需要在STW暂停期间执行;

    4. 使用写屏障来捕捉并发标记阶段应用线程对对象引用的更新。通过遍历这些更新的引用来修正标记状态,确保遗漏的对象不会被错误地回收;


http://www.kler.cn/a/523542.html

相关文章:

  • Vue3 结合 .NetCore WebApi 前后端分离跨域请求简易实例
  • mybatis(134/134)完结
  • c++:vector
  • Julia 之 @btime 精准测量详解
  • 二叉树的最大深度(遍历思想+分解思想)
  • 制造企业的成本核算
  • vue3阻止事件冒泡到父元素
  • FLTK - FLTK1.4.1 - demo - animgifimage-play
  • FLTK - FLTK1.4.1 - demo - animgifimage
  • 漂亮数 (线性筛+前缀和)
  • 【小白学AI系列】NLP 核心知识点(五)Transformer介绍
  • 99.19 金融难点通俗解释:营业总收入vs归母净利润vs扣非净利润
  • 新鲜速递:DeepSeek-R1开源大模型本地部署实战—Ollama + MaxKB 搭建RAG检索增强生成应用
  • 数论问题75
  • LeetCode题练习与总结:N 叉树的后序遍历--590
  • 2025年AI Agent(智能体)的发展机会
  • C语言连接Mysql
  • PCIe基础分享
  • TensorFlow实现逻辑回归模型
  • 本地部署 DeepSeek-R1 大模型指南:基于 Ollama 的完整流程
  • Cyber Security 101-Build Your Cyber Security Career-Security Principles(安全原则)
  • 软件工程-软件开发模型
  • RoboMaster- RDK X5能量机关实现案例(一)识别
  • .~C#循环结构
  • Vue学习四—— Home主体页面
  • 数据结构与算法分析:专题内容——人工智能中的寻路4之A*搜索(代码详解)