2014-12-04 16 views
1
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和obj所引用的a1仍然提到beta obj。那個對象將Garabage收集(SCJP圖書Q)

但得到的答覆是一個obj是準備GC任何人都可以解釋這種

+0

是錯字編輯 – Nik6019 2014-12-04 10:37:53

+0

您確定a1.b1和a1.b2應該指向b1嗎? – aioobe 2014-12-04 10:41:03

+0

是的根據問題 – Nik6019 2014-12-04 10:43:13

回答

2

我們呼籲堆Beta1 RESP兩個Beta對象。 Beta2和兩個Alpha對象Alpha1Alpha2

在第16行,你有以下情況:

enter image description here

正如你所看到的,Alpha2可達並通過參考Beta1Beta2依舊可達。因此,只有Alpha1纔有資格使用GC。

+1

你似乎有typo'd:因此,只有'oa1' a.k.a'a1' – zapl 2014-12-04 10:51:48

+0

但oa1仍然有ref1 ob1然後怎麼可能是GC – Nik6019 2014-12-04 10:57:10

+0

更新答案。 – aioobe 2014-12-04 10:57:19