class Beta{}
class Alpha{
static Beta b1;
Beta b2;
}
public class Tester{
public static void main(String a[]) {
Beta b1 = new Beta();
Beta b2 = new Beta();
Alpha a1 = new Alpha();
Alpha a2 = new Alpha();
a1.b1 = b1;
a1.b2 = b1;
a2.b2 = b2;
a1 = null;
b1 = null;
b2 = null;
//line 16
}
}
所以在第16行,有多少obj将有资格获得GC, 我认为没有一个对象应该是GC,因为a2仍然有ref,而a1引用的obj仍然引用了beta obj。
但答案是一个obj准备好Gc可以解释这个
答案 0 :(得分:2)
让我们调用堆Beta
上的两个Beta1
对象。 Beta2
和两个Alpha
个对象Alpha1
和Alpha2
。
在第16行,您有以下情况:
如您所见,Alpha2
是可以访问的,通过该引用Beta1
和Beta2
仍然可以访问。因此,只有Alpha1
符合GC条件。