1. 程式人生 > >MyEclipse安裝Eclipse Memory Analyzer外掛,並進行錯誤檔案分析流程

MyEclipse安裝Eclipse Memory Analyzer外掛,並進行錯誤檔案分析流程

在看深入JVM虛擬機器一書(p50,2.4 實戰OutOfMemoryError),有一個Java堆溢位的例子,使用到了Eclipse Memory Analyzer外掛,由於自己現在使用的是MyEclipse,所以就需要在MyEclipse上新增外掛。具體步驟如下:

1.先安裝MAT外掛

火狐截圖_2016-02-25T16-12-52.948Z

3.將下載的檔案解壓到MyEclipse的  dropins  資料夾下

image

4.建立和資料夾同名的.link檔案,檔案中的內容就寫上對應的地址(地址使用\\ 或者 /)

image

5.重啟MyEclipse,即可在window---->preferances中看到Memory Analyzer選項。

image

2.使用MAT工具進行分析例項

1.建立測試Java程式碼

複製程式碼
/**
 * 

   -verbose:gc -Xms20M -Xmx20M 
   -XX:+HeapDumpOnOutOfMemoryError


 * @author y
 *
 */
public class Test {

    static class OOMObject{
        
    }
    
    public static void main(String[] args) {
        List<OOMObject> list = new ArrayList<OOMObject>();
        
        
while(true){ list.add(new OOMObject()); } } }
複製程式碼

2.設定執行引數

image

image

解釋一下引數的意思:

1.Java -verbose:gc 中引數-verbose:gc 表示輸出虛擬機器中GC的詳細情況.

使用後輸出如下:

[Full GC 168K->97K(1984K), 0.0253873 secs]

解讀如下:

箭頭前後的資料168K和97K分別表示垃圾收集GC前後所有存活物件使用的記憶體容量,說明有168K-97K=71K的物件容量被回收,括號內的資料1984K為堆記憶體的總容量,收集所需要的時間是0.0253873秒(這個時間在每次執行的時候會有所不同)

Note:GC會暫用CPU時間片,有可能造成應用程式在某個時刻極短的停頓.

2.-Xms :設定堆的最小值, –Xmx :設定堆的最大值  

   在這裡將他們都設定為20M,可以避免堆自動擴充套件。

3.通過引數 –XX:+HeapDumpOnOutOfMemoryError 可以讓虛擬機器在出現記憶體溢位異常時Dump出當前的記憶體堆轉儲快照以便事後分析。

3.執行程式,將會出現如下資訊

image

這個時候就可以在工程的根目錄下找到對應的檔案了,然後我們就可以使用MAT工具Dump出來的堆轉儲快照進行分析。

3.進行分析

1.直接通過OpenFile將堆轉儲快照開啟

image

2.具體分析參照如下連結:

http://essen.iteye.com/blog/1825314

http://tivan.iteye.com/blog/1487855