2013-10-06 28 views
2

我想明白當行1中創建的對象將是垃圾回收......我認爲其對3號線,但我不認爲這是在我的答案 - 線路的選擇4 & 5就是答案垃圾收集 - 空引用和引用新對象

class MyObject{ 
    public void myMethod(){ 
     System.out.println("Mymethod"); 
    } 
} 


public class Test { 

    public static void main(String[] args) { 
     MyObject m = new MyObject(); //line1 
     m.myMethod();//line2 
     m = null;//line3 
     m = new MyObject();//line4 
     m.myMethod();//line5 
    } 

} 
+0

你是對的。答案應該是第3行。 –

+0

注意:第3行之後有資格參加GC,因此第4行可能是答案。它可能永遠不會被清理。 –

+0

引用可以準備好進行垃圾回收,但沒有辦法說明這是什麼時候。 –

回答

4

的一部分,如果你設置爲null的引用,並不意味着垃圾收集器會踢,將清潔內存吧。

只有合格/標對象是回收垃圾時JVM垃圾收集踢。垃圾回收器會檢查所有有資格爲沒有從任何地方引用的垃圾收集即對象的對象。

JVM使用一個稱爲標記標記爲垃圾收集的對象的過程。當GB踢進它時,會簡單地刪除標記的對象。

1

正確的答案是,它是不可能的第1行創建的對象會被垃圾收集時說。所有你可以肯定地說,它成爲合格被垃圾收集在第3行。它可能垃圾收集第3行後,但我們不能說它是。