三⾊标记法若不被STW保护可能会导致对象丢失,⽩⾊对象被⿊⾊对象引⽤,灰⾊对象对⽩⾊对象的引⽤丢失(为什么需要这个条件),导致对象丢失。

简介: 三⾊标记法若不被STW保护可能会导致对象丢失,⽩⾊对象被⿊⾊对象引⽤,灰⾊对象对⽩⾊对象的引⽤丢失(为什么需要这个条件),导致对象丢失。

"STW" 是指 "Stop-The-World",是一种垃圾回收(Garbage Collection)的技术。三色标记法是垃圾回收算法中的一种,用于标记和清理不再被使用的对象。

三色标记法使用三种不同的颜色(白色、灰色和黑色)来标记对象的可达性。在垃圾回收过程中,从根节点(如全局变量、活动线程等)出发,通过对象之间的引用关系进行遍历和标记。具体来说:

  1. 初始状态下,所有对象都被标记为白色,表示它们尚未被访问。

  2. 遍历根节点,将其标记为灰色,并将其直接引用的对象也标记为灰色。

  3. 逐步遍历灰色对象,将其标记为黑色,并将它们直接引用的对象标记为灰色。

  4. 重复步骤3,直到没有灰色对象为止。此时,所有可达对象都被标记为黑色,而未被标记的对象则可以判定为垃圾,可以进行回收。

在三色标记法中,保证对象不会丢失的关键是确保灰色对象的引用关系不被中断。如果灰色对象引用了一个白色对象,而在遍历过程中,灰色对象的引用丢失,那么白色对象将无法被正确标记为可达对象,从而导致对象丢失。

这就是为什么需要 "Stop-The-World" 的保护机制。在垃圾回收过程中,为了防止对象的引用关系发生变化,需要停止应用程序的执行,即暂停整个应用程序的运行,这就是 "Stop-The-World"。停止应用程序的执行可以确保在标记过程中对象之间的引用关系不会被修改,从而保证灰色对象的引用关系不会丢失。

总而言之,三色标记法中的对象丢失问题是由于灰色对象的引用关系丢失所导致的,而 "Stop-The-World" 的保护机制可以确保在垃圾回收过程中对象的引用关系不会被中断,从而避免对象丢失。

相关文章
|
算法 Java
25-【扩展补充】JVM 三色标记 增量更新 原始快照
本文将介绍JVM中的三色标记算法、增量更新和原始快照的概念。 首先,我们将深入探讨JVM中的三色标记算法。这种垃圾回收算法基于可达性分析,将对象分为三个状态:白色、灰色和黑色。通过标记对象的可达性,垃圾回收器可以确定哪些对象可以安全地回收,从而有效地管理内存。 接下来,我们将介绍增量更新技术。增量更新是一种垃圾回收的优化方法,它将垃圾回收过程分为多个阶段,并与应用程序交替执行。通过这种方式,增量更新可以减少垃圾回收的停顿时间,提高应用程序的响应性能。
206 0
|
数据库连接 数据库 数据安全/隐私保护
对象变量或with块变量未设置————问题根源
对象变量或with块变量未设置————问题根源
1149 0
对象变量或with块变量未设置————问题根源
|
Java
JAVA数组批量设值(初始化)的办法
JAVA数组批量设值(初始化)的办法
141 0
堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为“后进先出”。堆栈的长度可随意增加
堆栈(Strack)是指这样一段内存,它可以理解为一个筒结构,先放进筒中的数据被后放进筒中的数据“压住”,只有后放进筒中的数据都取出后,先放进去的数据才能被取出,称为“后进先出”。堆栈的长度可随意增加
185 0
|
Web App开发 存储 JavaScript
JavaScript原生之标记清理原理
JavaScript原生之标记清理原理
112 0
|
缓存 Java 数据库
如何避免无意间创建多余对象
6 避免创建不必要的对象 从字面意思上来看,大家肯定都知道创建不必要的对象是错误的做法。但这一节其实主要是提醒我们避免无意识的创建不必要对象的代码写法。
如何避免无意间创建多余对象
|
存储 Java
使用 HashMap 存一万条数据,构造时传 10000 还会触发扩容吗?
向HashMap 中存10000 条数据,初始化时,构造方法传值10000,会触发扩容吗?
使用 HashMap 存一万条数据,构造时传 10000 还会触发扩容吗?
|
存储 算法 Java
JVM07_ 对象的实例化、内存布局(对象头、实例数据、对齐填充)、访问定位、直接内存(一)
①. 从字节码角度看待对象的创建过程 ②. 对象的实例化(六个步骤)
150 0
JVM07_ 对象的实例化、内存布局(对象头、实例数据、对齐填充)、访问定位、直接内存(一)