关于三色标记算法

关于三色标记算法

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

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

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

垃圾收集过程:

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

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

相关推荐
色空大师5 分钟前
【debug调试详解-idea】
java·ide·intellij-idea·调试·远程调试
程序猿阿越6 分钟前
AutoMQ源码(一)读、写、Compaction
java·后端·源码
IronMurphy21 分钟前
【算法五十七】146. LRU 缓存
算法·缓存
ywl47081208725 分钟前
jwt生产token,简单版helloworld
java·数据库·spring
未若君雅裁29 分钟前
生产问题排查与性能瓶颈定位:日志、监控、链路追踪、压测与Arthas
java·web安全
宸丶一34 分钟前
Day 13:持久化记忆 - 让 Agent 拥有长期记忆
jvm·python·ai
器灵科技37 分钟前
AI视频工具实测:Seedance/可灵/HappyHorse谁最能打?
java·运维·数据库·人工智能·github
南部余额1 小时前
RabbitMQ 进阶:延迟队列完全指南
java·分布式·spring·rabbitmq
phltxy1 小时前
Spring AI Agents 智能体模式实战
java·人工智能·spring
凌波粒1 小时前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展