3、垃圾收集之判斷對象是否存活
1、引用計數算法
- 當有一個地方引用這個對象時,計數器加1
- 當引用失效時,計數器減1
- 當計數器爲0時,則對象死亡,等待回收
2、 可達性分析算法
- 若一個對象沒法經過引用連接到GC Roots時,則斷定該對象爲可回收對象(第一次標記)
- 目前java虛擬機採用的就是 可達性分析算法 判斷對象是否可回收
- 對於虛擬機斷定的可回收對象,還會再次進行標記是否有必要執行finalize()方法
- 該類中沒有覆蓋finalize()方法,則沒有必要執行finalize()方法
- 虛擬機已經調用過一次finalize()方法,則沒有必要執行finalize()方法
- 除了上述兩種狀況,虛擬機都會爲對象執行finalize()方法
- 若虛擬機斷定對象可回收,則此時將對象放到F-Queue中等待執行finalize()方法
- 若在覆蓋的finalize()方法中,將可回收對象賦值給其餘變量,則這個對象在第二次標記時被移除出可回收集合
![](http://static.javashuo.com/static/loading.gif)
歡迎關注本站公眾號,獲取更多信息