Java内存溢出排查过程
程序员文章站
2022-07-15 15:29:46
...
前言:
今天看到了敖丙的一篇关于排查堆内存溢出的博文,是自己没有接触过的知识,所以仿照过程自己也实验了一遍学习这部分的一些知识!
首先我使用的是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问题,此时程序也相应停止。