2011-06-30 21 views
0

在Java下面的生命週期是一個對象問題上的對象

Created 
In use (strongly reachable) 
Invisible 
Unreachable 
Collected 
Finalized 
Deallocated 

我的問題是,哪裏垃圾收集適合這裏的生命週期?我們什麼時候說對象是「垃圾收集」?它是在循環的最後階段之後嗎?請澄清。

回答

3

我想小擴展由JB Nizet給出了答案:

對象時不存在對更強大的引用進入可達狀態。當一個對象無法訪問時,它就是收集的候選對象。

當垃圾收集器已將對象識別爲無法訪問並將其作爲最終處理準備好作爲釋放的先驅時,對象處於收集狀態。如果對象有一個finalize方法,那麼它被標記爲最終化。

如果某個對象的finalize方法(如果有)已運行後仍然無法訪問,該對象處於最終狀態。最終的對象正在等待釋放。

解除分配狀態是垃圾回收的最後一步。如果在所有上述工作發生後仍然無法訪問某個對象,則該對象將成爲釋放的候選對象。

查看here瞭解更多信息。

+0

+1:非常好的解釋 –

3

我會說垃圾收集從對象從Unreachable收集到Collected時開始,並在對象被釋放時停止。除非使用終結器,否則通常不需要太在意,在99.999%的情況下不應該使用終結器。

+0

是的我同意你的說法,垃圾收集器會在物體變得無法到達時進場 –