关于三色标记算法

关于三色标记算法

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

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

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

垃圾收集过程:

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

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

相关推荐
YGGP4 小时前
【Golang】LeetCode 64. 最小路径和
算法·leetcode
.鸣5 小时前
set和map
java·学习
ha_lydms5 小时前
5、Spark函数_s/t
java·大数据·python·spark·数据处理·maxcompute·spark 函数
古城小栈5 小时前
Rust变量设计核心:默认不可变与mut显式可变的深层逻辑
算法·rust
电商API&Tina6 小时前
跨境电商 API 对接指南:亚马逊 + 速卖通接口调用全流程
大数据·服务器·数据库·python·算法·json·图搜索算法
黄河滴滴6 小时前
java系统变卡变慢的原因是什么?从oom的角度分析
java·开发语言
侠客行03176 小时前
Mybatis二级缓存实现详解
java·mybatis·源码阅读
LYFlied6 小时前
【每日算法】LeetCode 1143. 最长公共子序列
前端·算法·leetcode·职场和发展·动态规划
老华带你飞6 小时前
农产品销售管理|基于java + vue农产品销售管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
Edward111111117 小时前
tomcat_servlet
java·servlet·tomcat