1. 程式人生 > 其它 >Java隨筆,垃圾回收機制初理解

Java隨筆,垃圾回收機制初理解

物件在記憶體中有三種狀態:

可達狀態:
有引用指向物件時。
可恢復狀態:
沒有引用指向該物件時,程式會通知系統垃圾回收,但是在垃圾回收前,系統呼叫該物件的finalize()
重新讓一個引用指向該物件,這就是可回覆狀態,恢復到可達狀態。

不可達狀態:
沒有引用指向物件,並且在系統呼叫該物件finalize()後,
仍然沒有引用指向時,這個物件就會被垃圾回收

但是,大部分情況,物件失去引用後,程式只是通知系統進行垃圾回收,但系統什麼時候進行垃圾回收無法確定;

 

系統在進行垃圾回收時,會呼叫回收物件的finalize()方法,若方法結束還沒有引用指向,則回收資源,物件死亡。

正是因為系統進行垃圾回收的時間無法確定,java給了兩個api;
分別是:System.gc(),和Runtime.getRuntime.gc()
兩個方法結果相同,都是讓系統立刻對失去引用物件進行垃圾回收,屆時,如果重寫了該物件的finalize()方法,
則系統會執行它,如果沒有重寫,則會執行object的finalize方法。

不過,如果當前程式執行完畢或執行緒死亡,系統還沒進行垃圾回收,則不會執行該物件的finalize()方法。