內容:
GC Root解析
GC Root具體類別分析
一、GC Root解析
1.MAT查看GC Root

Java Basics->GC Root

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