Java JVM(十一):MAT 工具的使用
阿新 • • 發佈:2019-02-02
MAT是一個基於Eclipse 的記憶體分析工具,是一個基礎外掛。
當我們整合成功之後,開啟一個 hprof 檔案,如下圖所示:
在打開了一個 dump 檔案之後,會有如上圖所示,那麼,在左下角有 Histogram:列出每個類的實體數量,列出實體後,就可以找到誰引用誰。例如,假設有如下程式:
那麼,就可以如下圖找到誰引用誰(by outgoing reference 就是該物件引用誰, by incoming references 就是 誰引用它):
可以看到,Stu1 引用了 1個 Stu2 物件,這也是符合上述的main函式的。 再例如點選 Stu2 的by incoming references,如下圖:
當我們整合成功之後,開啟一個 hprof 檔案,如下圖所示:
- 漏洞監測報告:自動檢測 dump 檔案 的漏洞。報告哪些物件還存活,並且為什麼沒有被垃圾回收。
- 元件報告:分析可能引用記憶體問題的物件:比如 空字串,空集合等。
- 重新開啟之前的執行報告。
在打開了一個 dump 檔案之後,會有如上圖所示,那麼,在左下角有 Histogram:列出每個類的實體數量,列出實體後,就可以找到誰引用誰。例如,假設有如下程式:
public class Student { public static void main(String[] args) { Stu1 stu1 = new Stu1(); Stu2 stu2 = new Stu2(); stu1.setStu2(stu2); try { Thread.sleep(60 * 60 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } } } class Stu1{ private String name; private Stu2 stu2; public void setStu2(Stu2 stu2){this.stu2 = stu2;} } class Stu2{ private String name; }
那麼,就可以如下圖找到誰引用誰(by outgoing reference 就是該物件引用誰, by incoming references 就是 誰引用它):
例如:點選 Stu1 的 by outgoing references,如下圖:
可以看到,Stu1 引用了 1個 Stu2 物件,這也是符合上述的main函式的。 再例如點選 Stu2 的by incoming references,如下圖: