MyEclipse安裝Eclipse Memory Analyzer外掛,並進行錯誤檔案分析流程
在看深入JVM虛擬機器一書(p50,2.4 實戰OutOfMemoryError),有一個Java堆溢位的例子,使用到了Eclipse Memory Analyzer外掛,由於自己現在使用的是MyEclipse,所以就需要在MyEclipse上新增外掛。具體步驟如下:
1.先安裝MAT外掛
3.將下載的檔案解壓到MyEclipse的 dropins 資料夾下
4.建立和資料夾同名的.link檔案,檔案中的內容就寫上對應的地址(地址使用\\ 或者 /)
5.重啟MyEclipse,即可在window---->preferances中看到Memory Analyzer選項。
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.設定執行引數
解釋一下引數的意思:
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.執行程式,將會出現如下資訊
這個時候就可以在工程的根目錄下找到對應的檔案了,然後我們就可以使用MAT工具Dump出來的堆轉儲快照進行分析。
3.進行分析
1.直接通過OpenFile將堆轉儲快照開啟
2.具體分析參照如下連結:
http://essen.iteye.com/blog/1825314
http://tivan.iteye.com/blog/1487855