关于三色标记算法

关于三色标记算法

三色标记算法是一种用于垃圾收集得算法,主要用于解决在并发垃圾收集中可能出现得对象引用更新问题。在JVM中,这种算法主要应用于CMS(ConcurrentMarkSweep)收集器和G1(Garbage-first)收集器。

三色标记算法将对象分为三种颜色:

  1. 白色:表示对象尚未被垃圾收集器访问过,如果在垃圾收集结束时仍然为白色,那么该对象将被视为垃圾进行回收。
  2. 灰色:表示对象以及被垃圾收集器访问过,但是该对象引用得对象尚未被访问,灰色对象是垃圾收集器的工作对象。
  3. 黑色:表示对象已经垃圾收集器访问过,且该对象引用得所有对象也都已经被访问,黑色对象在本次垃圾收集过程中不再需要被访问。

垃圾收集过程:

  1. 垃圾收集器首先将所有的对象标记为白色;
  2. 从根对象开始,将跟对象标记为灰色;
  3. 垃圾收集器选择一个灰色对象,将其引用得所有白色对象标记为灰色;
  4. 将该对象标记为黑色
    这以过程一直持续到所有的对象都被标记为黑色,此时垃圾收集过程结束,所有的白色对象都被视为被垃圾并进行回收。

在并发垃圾收集过程中,应用程序可能会更新对象的引用,这可能会导致一些已经被标记为黑色的对象重新引用了白色对象,这种情况被称为"浮动垃圾"。为了解决这个问题,JVM采用了写屏障(Write Barrier)技术,当应用程序试图更新对象引用时,写屏障会将线管的对象重新标记为灰色,以确保不回遗漏任何需要被访问的对象。

相关推荐
Pniubi10 分钟前
力扣46全排列(回溯(递归))
算法·leetcode·职场和发展
文丑颜不良啊1 小时前
LeetCode1461~1480题目解析
java·leetcode
2301_780789668 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设9 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
ZhengEnCi10 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
步行cgn10 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川10 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵10 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David10 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas10011 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品