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

三色标记算法

一、三色标记是什么

三色标记是 JVM 垃圾回收中用于判断对象是否存活的一种算法。


二、三种颜色(核心)

颜色含义
白色未访问(可能是垃圾)
灰色已访问,但子对象还没处理
黑色已访问,且子对象也处理完

三、执行过程(一步一步)

假设有对象关系:

A → B → C


1️⃣ 初始状态

所有对象 = 白色


2️⃣ 从 GC Root 开始

A 变灰色


3️⃣ 扫描 A

  • A → B

  • B 变灰色

  • A 变黑色

A(黑) → B(灰) → C(白)


4️⃣ 扫描 B

  • B → C

  • C 变灰色

  • B 变黑色

A(黑) → B(黑) → C(灰)


5️⃣ 扫描 C

  • 没有子对象

  • C 变黑色

A(黑) → B(黑) → C(黑)


6️⃣ 回收

所有仍然是白色的对象 = 垃圾 → 回收


四、核心思想(一定要会说)

从 GC Root 出发,能访问到的对象 → 活着
访问不到的对象(白色) → 垃圾


五、为什么用三色标记(面试点)

👉 为了解决:

标记效率 + 支持并发 GC


六、最大问题(重点!)

❗“误删对象”(并发问题)

情况:

A → B → C

如果在标记过程中:

  1. A 不再指向 B

  2. B 还没被扫描

👉 可能导致:

B 被当成垃圾误删 ❌


七、解决方案(必须知道名字)

1️⃣ CMS:增量更新(Incremental Update)

2️⃣ G1:SATB(Snapshot At The Beginning)


八、面试标准回答

三色标记算法将对象分为白色、灰色和黑色三类,从 GC Roots 出发遍历对象,将可达对象标记为存活。白色对象表示未被访问,最终会被回收。该算法提高了标记效率,并支持并发垃圾回收,但在并发情况下可能出现误删问题,需要通过增量更新或 SATB 机制解决。

http://www.jsqmd.com/news/505192/

相关文章:

  • 【底层重构】C语言100篇:从入门到天花板 第25篇
  • 状态机实现电子门锁
  • 如何设计微服务统一认证中心
  • 碳化硅器件采购避坑指南:如何识别优质SiC MOSFET供应商(附主流厂商对比表)
  • Petalinux实战:从QSPI Flash启动Linux系统的完整配置指南
  • weixin239基于微信小程序高校订餐系统的设计与开发ssm(文档+源码)_kaic
  • 手把手教你用算能云空间搭建RISC-V版PyTorch环境(含最新CPUINFO补丁)
  • Python DXF处理库架构深度解析:企业级CAD数据处理最佳实践
  • 从电影片段到动作识别:如何用TensorFlow/Keras搭建你的第一个3D CNN视频分类模型
  • YOLOv8实战:5分钟搞定Docker部署(含CUDA加速配置)
  • 别再只用rc.local了!Debian 11/12系统服务开机自启的三种正确姿势(附systemd实战)
  • 基于STM32的智能空气净化器设计与实现(完整项目)
  • Few-shot学习实战:5个技巧让BERT在少量数据上快速微调
  • 探索未来编程的新纪元:Kind——纯函数式编程语言与证明助手
  • C盘空间持续告急?试试Windows Cleaner的智能清理方案
  • 【猫抓cat-catch】:媒体资源智能捕获的全方位技术解析与实战指南
  • 深入Android音频驱动层:AAudio的MMAP_NOIRQ模式是如何实现超低延迟的?
  • MSG文件查看工具:跨平台邮件解析与处理的技术实现与应用指南
  • 从信号到数据:基于NI-DAQ与LabVIEW的光电倍增管(PMT)高速采集系统搭建实战
  • 轻量化特征重构 | 一种基于强弱特征分离与转换的轻量级网络设计 | 技术解析
  • Spring Boot 面试核心笔记
  • spaCy社区与生态:探索丰富的扩展插件和工具集合
  • 掌握大数据领域Kafka的消息分区策略
  • 零基础5分钟上手「时空波动仪」:IBM Granite FlowState时间序列预测实战教程
  • 告别连接难题:Windows 11环境下Multisim主数据库稳定运行全攻略
  • Obsidian PDF++插件:如何打造你的专属护眼PDF阅读环境
  • 手把手教你用Arduino驱动串口屏:从接线到显示‘Hello World’的完整教程
  • 为什么92%的Dify部署在生产环境未启用Judge沙箱?——深度解析动态评分链路中的6类未授权推理逃逸风险
  • Windows Server 2022上Docker部署Dify避坑指南:从Hyper-V配置到镜像加速全流程
  • 别再乱接线了!手把手教你搞定HDMI/DP/Type-C接口的硬件检测电路(附原理图分析)