JProfiler的入門使用,流程介紹
JProfiler是安裝在IDEA的插件,用來排查OOM(OutOfMemoryError)錯誤。生成Dump內存快照。
當程序發生內存溢出時,快速定位內存泄露位置。
注意:JProfiler有服務器端和客戶端兩個部分,都要安裝,才能夠正常測試使用。
1.首先寫一段內存溢出的代碼。
import java.util.ArrayList;
//Dump文件 -Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError
public class DemoNative {
public static void main(String[] args) {
byte[] arr = new byte[1*1024*1024];
ArrayList<Object> arrayList = new ArrayList<>();
int count = 0;
try {
while (true){
arrayList.add(new DemoNative());
count = count +1;
}
}catch (Error e){
System.out.println("count"+count);
e.printStackTrace();
}
}
}
此時代碼是無法正常執行,會報OOM的錯誤。
2.在VM options中進行配置。
-Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError:設置內存初始大小爲1m,內存最大大小爲1M,並且打印Dump快照信息。
此時的程序執行結果:
3.打開Dump文件
打開目錄後,往上層目錄進行查找:找到和控制檯輸出相同的文件名。
4. 雙擊打開該文件,會自動進入JProfiler軟件。
其中標紅線的是比較常用的選擇。
Classes:
Biggest Object:最大的對象
References:它的引用
Time:佔用時間的分析
Heap Walker:堆
CPU views:CPU相關
Thread:線程相關
5.分析
根據Class可以定位到對應的類對象。
由於現在的沒有跑其他的線程,看main線程中就能夠定位到發生問題的具體代碼行數。