关于三色标记算法

关于三色标记算法

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

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

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

垃圾收集过程:

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

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

相关推荐
草莓base10 分钟前
【手写一个spring】spring源码的简单实现--bean对象的创建
java·spring·rpc
drebander34 分钟前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
乌啼霜满天24938 分钟前
Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
java·spring boot·spring·mvc
tangliang_cn43 分钟前
java入门 自定义springboot starter
java·开发语言·spring boot
莫叫石榴姐44 分钟前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
程序猿阿伟44 分钟前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
Grey_fantasy1 小时前
高级编程之结构化代码
java·spring boot·spring cloud
弗锐土豆1 小时前
工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程
java·opencv·安全·检测·面部
Elaine2023911 小时前
零碎04 MybatisPlus自定义模版生成代码
java·spring·mybatis
小小大侠客1 小时前
IText创建加盖公章的pdf文件并生成压缩文件
java·pdf·itext