JVM学习笔记(三)——三色标记

三色标记简介

介绍

三色三色,就是将对象分为黑色、灰色和白色。三种颜色代表对象不同的状态,黑色表示对象已经被垃圾收集器访问过,且这个对象的所有引用都已经扫描过;灰色表示对象已经被垃圾收集器访问过,但这个对象上至少存在一个引用还没有被扫描;白色表示对象尚未被垃圾收集器访问过(对象没有被任何对象引用);垃圾回收就是将标记为白色的对象回收。三色标记的原理就是这样,那么这样标记看似很准确,但是如果在并发环境下,却非常容易出现错误。
在并发环境下,用户进程也在同时进行,假如有这种情况,在标记完成后,黑色灰色白色已经标记完成,但是这个时候用户进程说,这个标记为白色的对象我要用,或者用户进程里修改了引用链上的引用,导致其引用链发生变化,这个时候对于原先的对象颜色标记就会出现问题,这个问题有个专业词,叫“对象消失”。如何处理这类问题呢,CMS采用了Incremental Update(增量更新)的算法。
三色标记如果是在用户进程暂停的时间内进行是没有问题的!

图示

关于三色标记出现的错误我用书中的图来记录下,更形象:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值