GC Root解析
GC Root具體類別分析
1.MAT查看GC Root
Java Basics->GC Root
Gc root:一個gc根就是一個對象,這個對象從堆外可以訪問讀取。以下一些方法可以使一個對象成為gc根。
1.System class:被bootstrap或者system類加載器加載的類,比如rt.jar里的java.util.*;
2.JNI local:native代碼里的local變量,比如用戶定義的JNI代碼和JVM的內(nèi)部代碼;
3.JNI global:native代碼里的global變量;
4.Thread block:當(dāng)前活躍的線程block中引用的對象;
5.Thread:已經(jīng)啟動并且沒有stop的線程;
6.busy monitor:被調(diào)用了wait()或者notify()或者被synchronized同步的對象,如果是synchronized方法,那么靜態(tài)方法指的類,非靜態(tài)方法指的是對象;
7.java local:local變量,比如方法的入?yún)⒑头椒▋?nèi)創(chuàng)建的變量;
8.native stack:native代碼里的出入?yún)?shù),比如file/net/IO方法以及反射的參數(shù);
9.finalizable:在一個隊列里等待它的finalizer 運行的對象;
10.unfinalized:一個有finalize方法的對象,還沒有被finalize,同時也沒有進(jìn)入finalizer隊列等待finalize;
11.unreachable:不會被觸碰到的對象,在MAT里被標(biāo)記為root用來retain object,否則是不會在分析中出現(xiàn)的;
12.java stack frame:java棧幀包含了本地變量,當(dāng)dump被解析時且在preferences里設(shè)置過把棧幀當(dāng)做對象,這時才會產(chǎn)生;
13.unknown:位置的root類型。