JVM可達性分析演算法
阿新 • • 發佈:2021-10-18
一、可達性分析演算法
“GC Roots”根物件集作為起始點集合,從這些節點開始,根據引用關係向下搜尋,搜尋過程路徑稱為“引用鏈”。如果,某物件到GC Root沒有引用鏈相關聯,那麼,就是GC Root到物件不可達,則證明這個物件不可能再被使用。
上圖所示,Object 1與GC Root可達,而Object 5與GC Root不可達。
二、GC Roots有哪些
在Java技術體系裡面,固定作為GC Root的物件:
-
- 虛擬機器棧中引用的物件,如:執行緒中被呼叫的方法堆疊中使用的引數、區域性變數、臨時變數。
- 方法區中類靜態屬性引用的物件。
- 方法區中常量引用的物件,比如:字串常量池裡的引用。
- 本地方法棧中JNI引用的物件。
- Java虛擬機器內部的引用,比如:基本資料型別對應的Class物件、常駐異常物件、系統類載入器,如:String、NullPointExcepition等。
- 所有被同步鎖持有的物件(synchronized關鍵字)。
- 反映Java虛擬機器內部情況的JMXBean、JVMTI中註冊的回撥、原生代碼快取等。