學習jvm,關於MAT an internal error occurred during:"Parsing heap dump" from問題


寫了一個死循環不斷的創建對象,模擬內存溢出

 1 package com.zuo.test1;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class Main {
 7     
 8     public static void main(String[] args) {
 9         List<Demo> demos=new ArrayList<>();
10         while(true){
11             demos.add(new Demo());
12         }
13     }
14 
15     
16 }

 

修改啟動參數。 

Apply

 

運行。

出現堆溢出錯誤,這時就會在本項目下出現xxx.hprof

 

然后再使用MAT工具引入此文件。進行分析。

通過MAT發現heap dump問題所在,就需要尋找導致內存泄漏的代碼點。這時往往需要打開對象依賴關系樹形視圖,點擊如圖按鈕即可。 

 

 

 

為了更有效率的使用 MAT,我們可以配置一些環境參數。因為通常而言,分析一個堆轉儲文件需要消耗很多的堆空間,為了保證分析的效率和性能,在有條件的情況下,我們會建議分配給 MAT 盡可能多的內存資源。你可以采用如下兩種方式來分配內存更多的內存資源給 MAT。

一種是修改啟動參數 MemoryAnalyzer.exe-vmargs -Xmx4g

另一種是編輯文件 MemoryAnalyzer.ini,在里面添加類似信息 -vmargs– Xmx4g。

說明:

1. MemoryAnalyzer.ini中的參數一般默認為-vmargs– Xmx1024m,這就夠用了。假如你機器的內存不大,改大該參數的值,會導致MemoryAnalyzer啟動時,報錯:Failed to create the Java Virtual Machine。

2.當你導出的dump文件的大小大於你配置的1024m(說明1中,提到的配置:-vmargs– Xmx1024m),MAT輸出分析報告的時候,會報錯:An internal error occurred during: "Parsing heap dump from XXX”。適當調大說明1中的參數即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM