三色标记算法

       在 JVM 并发垃圾收集(GC)中,三色标记算法是实现 “GC 线程与用户线程并行执行” 的关键技术,它解决了并发场景下 “如何准确标记存活对象” 的核心问题,是 CMS、G1 等现代收集器的底层基础。

一、三色标记的核心:三种颜色的定义与状态

算法通过 “颜色” 标记对象的标记阶段和存活状态,共三种颜色,对应不同角色:

颜色名称核心定义
白色未标记初始状态,对象尚未被 GC 线程访问。标记结束后仍为白色,判定为 “死亡对象”(可回收)。
灰色待处理对象已被 GC 线程访问,但该对象的所有子引用尚未遍历(后续需继续处理子对象)。
黑色已处理对象已被 GC 线程访问,且该对象的所有子引用都已遍历完成(后续无需再处理)。

二、并发标记的核心问题:漏标与错标

并发标记时,用户线程会修改对象引用关系,导致两种关键问题,其中漏标是必须解决的致命错误

1. 漏标(Missing Mark):存活对象被误判为死亡

  • 触发场景:白色对象(未标记)被黑色对象(已处理,不再遍历)引用,且原引用它的灰色对象(待处理)的引用被删除。
  • 危害:漏标会导致存活对象被错误回收,直接引发空指针异常,是致命问题。

2. 错标(False Mark):死亡对象被误判为存活

  • 触发场景:本应死亡的白色对象,被其他白色对象新增引用,导致标记结束后被误判为存活。
  • 影响:仅造成暂时内存泄漏,后续 GC 会重新判断并回收,属于可接受的误差。

三、解决漏标的两大方案

工业界通过两种成熟方案避免漏标,核心思路是 “记录关键引用变更,确保白色对象被正确标记”:

1. 增量更新(Incremental Update):记录新增引用

  • 核心逻辑:当黑色对象(已处理)新增对白色对象的引用时,通过 “写屏障” 记录该引用,后续重新遍历这个白色对象。
  • 通俗理解:黑色对象不能 “偷偷” 引用白色对象,所有新增引用必须 “报备”,确保白色对象被标记。
  • 应用:CMS 收集器采用此方案,在 “重新标记” 阶段(短暂 STW)遍历记录的引用,修正标记。

2. 原始快照(SATB):记录删除引用

  • 核心逻辑:当灰色对象(待处理)删除对白色对象的引用时,通过 “写屏障” 记录该删除的引用(视为 “快照”),后续仍会遍历这个白色对象。
  • 通俗理解:灰色对象删除的引用要 “记下来”,即使引用没了,也要确保白色对象不会漏标。
  • 应用:G1 收集器采用此方案,在 “最终标记” 阶段(短暂 STW)处理快照引用,修正结果。

四、总结

三色标记算法通过 “颜色划分对象状态”,解决了并发 GC 的标记准确性问题:

  1. 三种颜色清晰界定对象的 “未标记 - 待处理 - 已处理” 状态;
  2. 漏标是致命问题,需通过增量更新(CMS 用)或原始快照(G1 用)解决;
  3. 错标影响较小,可通过后续 GC 弥补。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/98047.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/98047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenStack 管理与基础操作学习笔记(一):角色、用户及项目管理实践

OpenStack实验 OpenStack命令 admin-openrc.sh 进入管理员视图查看当前 OpenStack 中的项目列表,验证是否已经登录成功切换用户 修改文件切换用户上传文件切换用户OpenStack 认证管理 实验介绍 通过 OpenStack Dashboard 和 OpenStack CLI 两种方式创建角色、用户、…

直接查找试卷且可以免费下载

有什么网站可以直接查找试卷且可以免费下载? SearXNG开源元搜索引擎 This website shows the SearXNG public instances searx一个可定制的搜索引擎 分享一个基于Blockstack的DApp-searx,一个可定制的搜索引擎。 1- 链接 官网地址:https://searx.worl…

【独立版】智创云享知识付费小程序 v5.0.23+小程序 搭建教程

介绍智创云享知识付费小程序v5.0.23 含PC、小程序、H5 、前端,系统独立版已修复已知bug问题。框架是一款基于ThinkPHP框架开发的虚拟资源知识付费小程序,为广大创业者、自媒体及培训机构提供知识付费、内容付费、资源变现等领域的行业解决方案&#xff1…

布尔运算-区间dp

面试题 08.14. 布尔运算 - 力扣(LeetCode) Solution 这题的思路比较直接,就是枚举最后一个进行计算的运算符,但是在实现过程中需要注意,定义范式f(l,r)表示l到r范围,l和r必须为数字,l1,r-1为运…

MyBatis-Plus 扩展全局方法

1.文件内容package com.ruoyi.business.mybatisplus.base;import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** 扩展的 Service 接口* 所有自定义 Service 接口都需要继承此接口…

13.Linux OpenSSH 服务管理

文章目录Linux OpenSSH 服务管理环境准备OpenSSH 服务介绍SSH 介绍SSH 建立连接的过程加密类型双向加密过程使用 ssh 访问远端CLIssh 工具演示ssh工具配置文件配置 ssh 密钥认证ssh 故障模拟故障模拟排故故障自定义 SSH 服务配置文件禁止 root 登录禁止密码登录只允许特定用户登…

速通ACM省铜第五天 赋源码(MEX Count)

目录 引言: MEX Count 题意分析 逻辑梳理 代码实现 结语: 引言: 本来,今天我是想着出俩题或三题题解的,但是在打第一题的时候就天塌了,导致今天就只搓了一道题,这题的难度在CF中为1300的水准&…

【数据结构与算法-Day 27】堆的应用:从堆排序到 Top K 问题,一文彻底搞定!

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

企业即时通讯保障企业通讯安全,提升企业部门协作效率

在当今数字化转型的大潮中,企业即时通讯软件已从单纯的沟通工具,逐步演变为保障企业数据安全的核心基础设施。吱吱企业即时通讯软件通过“私有化部署全流程加密”的双重机制,为企业构建了一套集“通讯安全”与“部门协作”于一体的数字化解决…

《华为变革法:打造可持续进步的组织》读书笔记

推荐序一:变革是企业活下去的基础(胡彦平)华为前常务副总裁、变革指导委员会成员胡彦平在序言中强调,企业存续的核心命题是应对不确定性,而变革能力是破解这一命题的唯一答案。他以华为 30 余年的发展历程为例&#xf…

第二篇:排序算法的简单认识【数据结构入门】

排序算法的分类标准 时间复杂度分类 a. 简单排序算法:时间复杂度O(n),冒泡排序、选择排序、插入排序; b. 高级排序算法:时间复杂度O(n logn),快速排序、归并排序、堆排序; c. 线性排序算法:时间…

快速掌握Dify+Chrome MCP:打造网页操控AI助手

你是否曾经希望那些强大的开源大模型能更贴合你的专业领域,或者学会模仿你的行文风格?其实,实现这个目标的关键就在于“微调”。曾几何时,微调模型是大公司的专属游戏——动不动就需要几十张GPU和复杂的分布式训练技术。 而现在&…

单词记忆-轻松记忆10个实用英语单词(15)

1. repaint含义:重新油漆 读音标注:/ˌriːˈpeɪnt/ 例句:We need to repaint the walls after the repairs. 译文:修理完成后需要重新粉刷墙壁。 衍生含义:重新绘制(图像场景);翻新…

visual studio快捷键

1.visual studio代码格式化快捷键 1.CtrlA(全选) 2.CtrlK 3.CtrlF2.多行注释 1.Ctrlk 2.Ctrlc2.多行取消注释 1.Ctrlk 2.Ctrlu

Django全栈班v1.04 Python基础语法 20250913 下午

练习:个人信息收集器 任务:创建一个个人信息收集和展示程序 要求: 收集用户的姓名,年龄,城市,爱好验证年龄输入,必须是正数格式化输出用户信息计算用户出生年份 name input("请输入姓名&a…

学习海康VisionMaster之字符缺陷检测

前言:差不多三个月没更新了,天天码代码,实在是太忙了,有时候也在想这么忙到底是不是工作方法的问题,怎么样才能变成大师呢! 一:进一步学习 今天学习下VisionMaster中的字符缺陷检测&#xff1…

若依4.8.1打包war后在Tomcat无法运行,404报错的一个解决方法

背景 最近使用若依4.8.1进行二次开发,接着尝试打包成war包进行部署,结果出现了404,提示“HTTP状态 404 - 未找到,请求的资源[/ruoyi-admin/]不可用”,翻了网上的教程,包括看了官方的解疑都没有说到该情况。…

华清远见25072班网络编程学习day6

重点内容:数据库基本概念:数据(Data):能够输入计算机并能被计算机程序识别和处理的信息集合数据 (Database)数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合重要概念&#…

机器学习-网络架构搜索

Neural Architecture Search(NAS) 一个神经网络有不同类型的超参数 拓扑结构:resnet,mobilenet 单独层:核大小,卷积层的通道,输出隐藏单元的个数NAS自动设计神经网络 如何设计搜索空间 如何探索…

云手机在办公领域中自动化的应用

云手机在办公自动化领域正逐渐展现出强大的潜力,以下是其在办公中自动化应用的多方面介绍:企业借助云手机搭载的办公软件,可实现文档处理自动化,对于重复性文档任务,如制作每月固定格式的销售报告、财务报表等&#xf…