基本上,我對Java相當陌生,我試圖讓我的頭圍繞下面。當我離開範圍但仍然有參考時,Java GC發生了什麼?
public class Test {
TestObject objectA;
public static void main(String args[])
{
Test t = new Test();
t.test();
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {}
System.out.println("Obj A: " + t.objectA.toString());
}
}
void test(){
Object objectB = new TestObject(1, 1);
objectA = (TestObject)objectB;
System.out.println("Obj B: " + objectB);
objectB = null; System.out.println("Obj B: " + objectB);
}
}
輸出:
Obj B: [email protected]
Obj B: null
Obj A: [email protected]
Obj A: [email protected]
基本上,我在方法測試創建本地對象對象B()和分配給它的參照可變對象A的測試對象的內部。
然後我將局部變量設置爲null並驗證引用已被清零。
現在從我的理解,我只是有效地消除了指向對象的指針。 objectA仍然存在,並且objectA保存唯一的引用。這是否意味着垃圾收集器不會收集在狹窄範圍的方法中創建的對象?
如果我沒有指向objectA的指針,我的對象是否會被收集?
對不起,如果這似乎是一個明顯的問題與答案我只需要確保我瞭解我已經閱讀。
爲我清理乾杯。 – 2011-05-02 16:19:53