假設我們從人的對象:存在的對象,什麼會在這種情況下發生
Person p = new Person("andrea");
如果我現在創建P的另一個目的:
p = new Person("Sam");
在什麼情況這個人與安德烈亞人?它會從垃圾收集器中刪除?或者它仍然存在?如果是的話,我怎樣才能刪除Andrea的對象?
感謝您的解釋和幫助。
假設我們從人的對象:存在的對象,什麼會在這種情況下發生
Person p = new Person("andrea");
如果我現在創建P的另一個目的:
p = new Person("Sam");
在什麼情況這個人與安德烈亞人?它會從垃圾收集器中刪除?或者它仍然存在?如果是的話,我怎樣才能刪除Andrea的對象?
感謝您的解釋和幫助。
p
是最初指向Person
「andrea」的參考。創建新的Person
並使其指向p
後,之前創建的對象(「andrea」)變爲無法訪問,因此符合GC的條件。實際對象將被GCed取決於當前的JVM狀態和正在使用的GC。
p = new Person("Sam");
一旦你寫這個,你覆蓋現有的,因此它是無法訪問。將盡快收集垃圾。
無法強制垃圾收集器從堆中刪除該對象。你唯一能做的就是編寫System.gc()
來調用垃圾回收。 但是直到調度程序運行垃圾回收時。
請注意,System.gc()'實際上可能被虛擬機忽略 – TheLostMind
它將一直存在,直到下一個垃圾收集週期。 –
你不能刪除它。即使它是任何列表或地圖的一部分,但只有當我們從這些對象中移除時,纔會將此對象的引用分開。但是最終只有當GC根本沒有被引用時才被GC收集。 – SacJn