GC Root 對象有哪些
(2)方法區中的類靜態屬性引用對象
(4)本地方法棧JNI的引用對象
一個對象可以屬於多個root,GC root有幾下種:
• Class - 由系統類加載器(system class loader)加載的對象,這些類是不能夠被回收的,他們可以以靜態字段的方式保存持有其它對象。我們需要注意的一點就是,通過用戶自定義的類加載器加載的類,除非相應的java.lang.Class實例以其它的某種(或多種)方式成爲roots,否則它們並不是roots,.
• Stack Local - Java方法的local變量或參數
• JNI Local - JNI方法的local變量或參數
• JNI Global - 全局JNI引用
• Monitor Used - 用於同步的監控對象
• Held by JVM - 用於JVM特殊目的由GC保留的對象,但實際上這個與JVM的實現是有關的。可能已知的一些類型是:系統類加載器、一些JVM知道的重要的異常類、一些用於處理異常的預分配對象以及一些自定義的類加載器等。然而,JVM並沒有爲這些對象提供其它的信息,因此就只有留給分析分員去確定哪些是屬於"JVM持有"的了。