網上文檔很多,但最初都有問題。整理一份,作為備份。使用過程:開發代碼寫完后,對可能出現內存溢出的代碼,添加配置文件,生成.hprof文件,用memory Analyzer分析排查問題,且泄漏內存大小可配置。具體安裝測試一條龍如下:
1.安裝:
help-》install new software -》work with : 這里填寫eclipse版本: Kepler - http://download.eclipse.org/releases/kepler(注意這里不同版本可能地址不同!!!)--》General Purpose Tools--》找到”Memory Analyzer“和”Memory Analyzer(Charts)“,並選取。安裝完后重啟eclipse.
2.提前修改配置:注意:由於后續分析過程需要大量內存,所以,后面打開分析后的文件時,可能會報內存溢出,需要調整eclipse內存,注意:網上很多都是騙人的,必須到eclipse目錄下找到eclipse.ini在最后:-Xms2048m -Xmx2048m 這樣既可,想動態看見eclipse運行內存:
3.編寫內存泄漏測試代碼
大致是往ArrayList中循環添加大量字符串。這對20M的內存設置來說肯定是會溢出的。
1 @Test 2 public void testOutOfMemory(){ 3 List<String> list = new ArrayList<String>(); 4 for(int i=0;i<10000000;i++){ 5 String str = new String(); 6 list.add(str); 7 } 8 }
4.運行參數配置:Run as-->Run Configurations-->Arguments-->VM arguments:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError,配置20M當做內存溢出上限,方便測試,具體大小大家可以自己控制。-XX:+HeapDumpOnOutOfMemoryError 配置后,當存溢出就會生成文件。如下圖:,測試代碼運行后,控制台輸出,見下圖:
.
5.代碼運行后,eclipse下刷新工程可見,生成了hprof文件,雙擊打開(注意,此處就是第二步設置參數的原因)。默認選擇第一項,finish即可。
,具體分析:
,上圖可見,是主線程的ArrayList內存溢出了。