內(nèi)容:
GC Root解析
GC Root具體類別分析
一、GC Root解析
1.MAT查看GC Root

Java Basics->GC Root

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