java中什麼樣的物件才能作為gc root物件,gc root物件有哪些
GC管理的主要區域是Java堆,一般情況下只針對堆進行垃圾回收。方法區、棧和本地方法區不被GC所管理,因而選擇這些區域內的物件作為GC roots,被GC roots引用的物件不被GC回收。
詳細:
GC Root
常說的GC(Garbage Collector) roots,特指的是垃圾收集器(Garbage Collector)的物件,GC會收集那些不是GC roots且沒有被GC roots引用的物件。
一個物件可以屬於多個root,GC root有幾下種:
Class - 由系統類載入器(system class loader)載入的物件,這些類是不能夠被回收的,他們可以以靜態欄位的方式儲存持有其它物件。我們需要注意的一點就是,通過使用者自定義的類載入器載入的類,除非相應的java.lang.Class例項以其它的某種(或多種)方式成為roots,否則它們並不是roots。
Thread - 活著的執行緒
Stack Local - Java方法的local變數或引數
JNI Local - JNI方法的local變數或引數
JNI Global - 全域性JNI引用
Monitor Used - 用於同步的監控物件
Held by JVM - 用於JVM特殊目的由GC保留的物件,但實際上這個與JVM的實現是有關的。可能已知的一些型別是:系統類載入器、一些JVM知道的重要的異常類、一些用於處理異常的預分配物件以及一些自定義的類載入器等。然而,JVM並沒有為這些物件提供其它的資訊,因此需要去確定哪些是屬於"JVM持有"的了。
------------------------------------------------------------------------------------------------------
在Java語言裡,可作為GC Roots物件的包括如下幾種:
a.虛擬機器棧(棧楨中的本地變數表)中的引用的物件
b.方法區中的類靜態屬性引用的物件
c.方法區中的常量引用的物件
d.本地方法棧中JNI的引用的物件
相關文章
- 什麼是物件,為什麼要物件導向,怎麼才能物件導向?物件
- JVM 從入門到實戰 --- 02 什麼樣的物件需要被 GCJVM物件GC
- HCD中Root Hub物件的初始化物件
- GC是什麼?為什麼要有GC?GC
- 物件儲存的優勢有哪些?為什麼要選擇物件儲存?物件
- GC roots如何判斷物件不可達GC物件
- Java建立物件的方法有哪些?Java物件
- 什麼是垃圾蒐集(GC)?為什麼要有GC呢?GC
- 過早的給方法中 引用物件 設為 null 可被 GC提前回收嗎?物件NullGC
- GC判定與回收演算法+java物件引用型別GC演算法Java物件型別
- jackson學習之四:WRAP_ROOT_VALUE(root物件)物件
- js中bom物件有哪些JS物件
- GC析構物件和列表的處理過程GC物件
- Java虛擬機器-GC垃圾回收演算法-判定一個物件是否是可回收的物件Java虛擬機GC演算法物件
- 為什麼Java需要物件的序列化Java物件
- 為什麼 JVM 需要 GCJVMGC
- 為什麼Java字串是不可變物件?Java字串物件
- Java面試題:為什麼HashMap不建議使用物件作為Key?Java面試題HashMap物件
- 物件導向中類和物件的定義是什麼?物件
- JVM 判斷物件已死,實踐驗證GC回收JVM物件GC
- Java物件在JVM中長啥樣Java物件JVM
- python中物件導向有什麼特點Python物件
- 內建物件、宿主物件和本地物件是什麼物件
- Java 中建立子類物件會建立父類物件麼?Java物件
- 值物件到底有什麼作用?物件
- 物件導向有哪些特性物件
- 在Java中建立物件的不同方法是什麼?Java物件
- 什麼是物件?物件
- [寫作中...]Js物件導向(2): 建立物件JS物件
- java中的引用物件Java物件
- Java中的物件“克隆”Java物件
- 為什麼Go不再需要Java風格的GC?- itnextGoJavaGC
- 物件為什麼活在記憶體的解析物件記憶體
- GC是什麼?為什麼我們要去使用它GC
- 【Java基礎知識】物件導向有哪些特性Java物件
- 『Java 語法基礎』物件導向有哪些特性Java物件
- 為什麼物件是大勢所趨?物件
- 什麼是BOM物件物件