2015-10-27 225 views
1

假設我們從人的對象:存在的對象,什麼會在這種情況下發生

Person p = new Person("andrea"); 

如果我現在創建P的另一個目的:

p = new Person("Sam"); 

在什麼情況這個人與安德烈亞人?它會從垃圾收集器中刪除?或者它仍然存在?如果是的話,我怎樣才能刪除Andrea的對象?

感謝您的解釋和幫助。

+1

它將一直存在,直到下一個垃圾收集週期。 –

+0

你不能刪除它。即使它是任何列表或地圖的一部分,但只有當我們從這些對象中移除時,纔會將此對象的引用分開。但是最終只有當GC根本沒有被引用時才被GC收集。 – SacJn

回答

5

p是最初指向Person「andrea」的參考。創建新的Person並使其指向p後,之前創建的對象(「andrea」)變爲無法訪問,因此符合GC的條件。實際對象將被GCed取決於當前的JVM狀態和正在使用的GC。

5
p = new Person("Sam"); 

一旦你寫這個,你覆蓋現有的,因此它是無法訪問。將盡快收集垃圾。

1

無法強制垃圾收集器從堆中刪除該對象。你唯一能做的就是編寫System.gc()來調用垃圾回收。 但是直到調度程序運行垃圾回收時。

+1

請注意,System.gc()'實際上可能被虛擬機忽略 – TheLostMind

相關問題