jvm-三色标记
2022-09-02 09:40:51 0 举报
jvm-三色标记
作者其他创作
大纲/内容
2.1. a.b.c=null;B 删除对C的引用,GC root可达性分析算法将C标记为白色
gc root (a)
1. 初始标记阶段:只标记gc root (成员变量、局部变量)所直接引用的对象;所以只会标记A的直接引用对象;A:被扫描到,且所有引用都已被扫描--标记为黑色B:被扫描到,但是其存在的引用暂时还没有被扫描--标记为灰色C:未被扫描到--标记为白色
B
public class ThreeColorTest { public static void main(String[] args) { A a = new A();//-----并发标记开始 C c = a.b.c; a.b.c = null; a.c = c; }}class A { B b = new B(); C c = null;}class B { C c = new C();}class C {}
2.并发标记开始
A
最终导致C实际非垃圾对象却未被标记
2.2. a.c=c;A增加对C的引用,但是A已被标记为黑色不会再被扫描所以不会再给C重新标记
C
0 条评论
下一页