2012-05-22 61 views
0

SCJP第3章中有一個問題。
請看下面的代碼:確定有多少物品符合GC要求

public class Sample_1 { 


    Short story = 200; 

    Sample_1 go(Sample_1 sample){ 
     sample = null; 
     return sample; 
    } 

    public static void main(String a[]){ 
     Sample_1 sample1 =new Sample_1(); 
     Sample_1 sample2 =new Sample_1(); 
     Sample_1 sample3 = sample1.go(sample2); 

     sample1 = null; 

     //DO STUFF 

    } 

} 

問:如何許多對象資格GC @行//DO STUFF

選項:
編譯失敗
它不可能知道
一個例外是在運行時拋出

書上說:正確的ansert爲2,並說「只有一個Sample_1對象(sample1)符合GC的條件,但它與它具有關聯的Short值。因此,有兩個對象可供GC使用」「

仍然無法理解此答案。我們已經將sample1對象歸零。在我看來,沒有GC的對象。

任何想法?

回答

0

得到了解決方案.. 這裏...有三個對象sample1,sample2,sample3。

sample3爲空,所以不需要GV它。我的意思是它在整個程序中沒有初始化。 sample2正在使用upto last statement.So JVM不能GV它。

而且我們正在取消sample1。所以它被添加到GV隊列中。並且sample1本身具有Short對象。因此,有兩個對象可供GV使用。

謝謝,Gunjan。

1

由於sample1爲空,因此爲sample1分配的內存及其包含的Short變量有資格進行垃圾回收。

0

還是無法理解這個答案。我們已經清零 sample1對象。在我看來,沒有GC的對象。

將變量設置爲null並不意味着它是GC'ed,這意味着它是可以被GC'ed的。您無法以編程方式控制GC何時運行。