前言:
今天看到了敖丙的一篇關於排查堆內存溢出的博文,是自己沒有接觸過的知識,所以仿照過程自己也實驗了一遍學習這部分的一些知識!
首先我使用的是Windows電腦,所以查看堆空間的插件在這裏!
1、先看自己電腦的堆空間
2、下載Visual GC插件
3、執行相應的代碼測試堆空間
public class jvmController {
private static final Integer K = 1024;
public static void main(String[] args) {
int size = K*K*8;
List<byte[]> list = new ArrayList<>();
for (int i = 0; i < K; i++) {
System.out.println("寫入數據"+(i+1)+"M");
try {
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
list.add(new byte[size]);
}
}
}
4、通過Visual GC查看堆空間中的各個區域的佔用情況(Eden區、Survivor區、老年代區)
5、程序執行一段時間可以看到堆空間的佔用明顯上升
6、查看dump文件的位置,然後通過mat工具查看dump文件
最後分析dump文件中出現的問題,已經定位到問題的所在。
通過執行代碼可以看到,執行到一定的次數就會出現OOM問題,此時程序也相應停止。