(轉)Java回收對象的標記 和 對象的二次標記過程


 

Java回收對象的標記 和 對象的二次標記過程

二次標記

針對這個問題,虛擬機的做法是進行兩次標記,即第一次標記不在“關系網”中的對象。第二次的話就要先判斷該對象有沒有實現finalize()方法了,如果沒有實現就直接判斷該對象可回收;如果實現了就會先放在一個隊列中,並由虛擬機建立的一個低優先級的線程去執行它,隨后就會進行第二次的小規模標記,在這次被標記的對象就會真正的被回收了。

finalize()在什么時候被調用?
有三種情況
1.所有對象被Garbage Collection時自動調用,比如運行System.gc()的時候.
2.程序退出時為每個對象調用一次finalize方法。
3.顯式的調用finalize方法

 

JVM進階(六)——鮮為人知的二次標記

舉例說明


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM