news 2026/7/1 13:13:58

三色标记算法了解吗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
三色标记算法了解吗

1.用于垃圾回收器升级,将STW变为并发标记。STW就是在标记垃圾的时候,必须暂停程序,而使用并发标记,就是程序一边运行,一边标记垃圾。

  1. 避免重复扫描对象,提升标记阶段的效率

什么是三色:

首先我们需要知道三色标记法就是根据可达性分析从GC Roots开始进行遍历访问,在遍历对象过程中,按“是否检查过”这个条件将对象标记成三种颜色:

白色:该对象没有被标记过。(对象垃圾)

灰色:该对象已经被标记过了,但该对象下的属性没有全被标记完。(GC需要从此对象中去寻找垃圾)

黑色:该对象已经被标记过了,且该对象下的属性也全部都被标记过了。(程序所需要的对象)

2.2.三色标记过程:

假设现在有白、灰、黑三个集合(表示当前对象的颜色),其遍历访问过程为:

初始时,所有对象都在【白色集合】中;

将 GC Roots直接引用到的对象挪到【灰色集合】中;

从灰色集合中获取对象:

3.1. 将本对象引用到的其他对象全部挪到【灰色集合】中;

3.2. 将本对象挪到【黑色集合】里面。

重复步骤3,直至【灰色集合】为空时结束。

结束后,仍在【白色集合】的对象即为GC Roots不可达,可以进行回收。

需要注意,传统标记方式发生Stop The World时,对象间的引用是不会发生变化的,可以轻松完成标记。

而并发标记在标记期间应用线程还在继续跑,对象间的引用可能发生变化,就会出现错标和漏标的情况就有可能发生。

3.存在的问题

浮动垃圾:并发标记的过程中,若一个已经被标记成黑色或者灰色的对象,突然变成了垃圾,由于不会再对黑色标记过的对象重新扫描,所以不会被发现,那么这个对象不是白色的但是不会被清除,重新标记也不能从GC Root中去找到,所以成为了浮动垃圾,浮动垃圾对系统的影响不大,留给下一次GC进行处理即可

  • 对象漏标问题(需要的对象被回收):并发标记的过程中,一个业务线程将一个未被扫描过的白色对象断开引用成为垃圾(删除引用),同时黑色对象引用了该对象(增加引用)(这两部可以不分先后顺序);因为黑色对象的含义为其属性都已经被标记过了,重新标记也不会从黑色对象中去找,导致该对象被程序所需要,却又要被GC回收,此问题会导致系统出现问题,而CMS与G1,两种回收器在使用三色标记法时,都采取了一些措施来应对这些问题,CMS对增加引用环节进行处理(Increment Update),G1则对删除引用环节进行处理(SATB)。

4.总结

三色标记算法是根可达算法的一种实现方案,其目的是为了找出所有可达对象。三色标记算法会产生多标和漏标问题,其中漏标问题最严重。漏标问题会导致本该存活的对象被回收,从而导致严重的程序问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 8:53:23

EmbeddingGemma-300m在医疗领域的创新应用:病历语义检索系统

EmbeddingGemma-300m在医疗领域的创新应用:病历语义检索系统 1. 当医生还在翻找病历,AI已经找到了答案 上周在一家三甲医院信息科交流时,一位主任医师提到一个日常困扰:他每天要查阅20多份既往病历,只为确认某个罕见…

作者头像 李华
网站建设 2026/7/1 16:02:00

AcousticSense AI开源镜像:支持CUDA加速的ViT音频分类模型开箱即用

AcousticSense AI开源镜像:支持CUDA加速的ViT音频分类模型开箱即用 1. 什么是AcousticSense AI?——让AI“看见”音乐的听觉工作站 你有没有想过,一段30秒的爵士乐片段,AI不仅能听出是爵士,还能分辨出是比莉哈乐黛式…

作者头像 李华
网站建设 2026/7/1 23:38:46

Cosmos-Reason1-7B快速上手:VS Code插件集成本地推理调用

Cosmos-Reason1-7B快速上手:VS Code插件集成本地推理调用 1. 工具概述 Cosmos-Reason1-7B是一款专为本地推理任务设计的智能工具,基于NVIDIA官方发布的Cosmos-Reason1-7B大语言模型开发。这个工具特别适合处理需要逻辑推理、数学计算和编程解答的场景&…

作者头像 李华
网站建设 2026/7/1 23:36:53

ChatGLM3-6B多场景落地:IT运维知识库问答+产品需求文档生成

ChatGLM3-6B多场景落地:IT运维知识库问答产品需求文档生成 1. 为什么是ChatGLM3-6B-32k? 在本地部署大模型这件事上,很多人卡在第一步:选哪个模型?跑得动吗?稳不稳?答得准不准? Ch…

作者头像 李华
网站建设 2026/7/1 12:21:10

GTE-Pro与MySQL优化实践:十亿级向量数据的快速检索方案

GTE-Pro与MySQL优化实践:十亿级向量数据的快速检索方案 1. 当语义搜索撞上海量数据:一个真实的技术困境 上周在给客户做技术方案评审时,一位架构师直接把笔记本推到我面前,屏幕上是一张正在缓慢滚动的查询日志:“我们…

作者头像 李华