news 2026/2/23 1:56:42

三色标记算法了解吗

作者头像

张小明

前端开发工程师

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/2/13 18:17:54

opencode vs CodeLlama:开源AI编码工具性能对比与GPU优化指南

OpenCode vs CodeLlama:开源AI编码工具性能对比与GPU优化指南 1. OpenCode:终端原生的AI编程助手新范式 OpenCode 不是又一个网页版代码助手,它从诞生第一天起就决定“不碰浏览器”。2024年开源的这个项目用 Go 语言写成,核心目…

作者头像 李华
网站建设 2026/2/16 22:00:07

Janus-Pro-7B应用场景:自媒体配图分析+标题生成一体化工作流

Janus-Pro-7B应用场景:自媒体配图分析标题生成一体化工作流 1. 引言:自媒体创作的新助手 每天,数以百万计的自媒体创作者面临同样的挑战:如何快速找到合适的配图,并写出吸引眼球的标题。传统的工作流程需要先搜索图片…

作者头像 李华
网站建设 2026/2/21 20:20:52

RexUniNLU模型联邦学习实践:跨机构数据协作新范式

RexUniNLU模型联邦学习实践:跨机构数据协作新范式 1. 医疗与金融场景下的数据困局 上周和一家三甲医院的信息科主任聊了聊,他提到一个很现实的问题:他们积累了十几年的电子病历数据,但想用这些数据训练一个更好的临床辅助诊断模…

作者头像 李华
网站建设 2026/2/13 8:34:21

Fish-Speech 1.5与AI智能体的语音交互集成方案

Fish-Speech 1.5与AI智能体的语音交互集成方案 1. 为什么AI智能体需要真正的语音能力 你有没有试过和一个只能打字的AI助手聊天?它回答得再快,也总感觉少了点温度。当用户说“我今天心情不太好”,文字回复再贴心,也不如一句带着…

作者头像 李华
网站建设 2026/2/20 4:28:28

StructBERT中文语义匹配系统企业部署:灰度发布与AB测试支持方案

StructBERT中文语义匹配系统企业部署:灰度发布与AB测试支持方案 1. 系统定位与核心价值 StructBERT中文语义智能匹配系统不是又一个通用文本编码器,而是一套专为中文企业级语义理解场景打磨的「精准匹配工具」。它不追求泛泛的语义表征能力&#xff0c…

作者头像 李华