JVM中的三色标记法是什么?
- 一、基本概念
- 二、标记过程
- 三、优势与问题
- 四、漏标与多标的解决方案
三色标记法(Tri-color Marking Algorithm)是Java虚拟机(JVM)中一种用于追踪对象存活状态的垃圾回收算法。
它基于William D. Hana和Mark S. McCulleghan在1976年提出的两色标记法的基础上进行了改进,通过引入“灰色”状态,使得垃圾回收过程能够更加高效地进行。
以下是对JVM中三色标记法的详细解释:
一、基本概念
在三色标记法中,JVM将内存中的对象分为三个颜色:
-
白色:表示对象尚未被垃圾收集器访问过。在可达性分析刚刚开始的阶段,所有的对象都是白色的。若在分析结束的阶段,仍然是白色的对象,即代表不可达,可以被回收。
-
灰色:表示对象已经被垃圾收集器访问过,但这个对象上至少存在一个引用还没有被扫描过。灰色对象是需要进一步扫描的对象。
-
黑色:表示对象已经被垃圾收集器访问过,且这个对象的所有引用都已经扫描过。黑色的对象代表已经扫描过,它是安全存活的,如果有其他对象引用指向了黑色对象,无须重新扫描一遍。