OOM了,怎么办?
最好能够快速找到代码第几行出错:
内存快照分析工具:MAT,Jprofiler
MAT、Jprofiler 作用:
- 分析Dump内存文件,快速定位内存泄漏。
- 获得堆中的数据
- 获得大的对象
Jprofiler安装:
- IDEA插件中搜索Jprofiler即可,安装好restart IDEA
- 去网页搜索Jprofiler,下载对应的操作系统的安装文件
![](https://img-blog.csdnimg.cn/img_convert/4195dd36cf6c229d009a5b69e3673755.png)
3.安装好应用即可。
Jprofiler使用:
举例说明,写一个OOM的情况
package com.gao.test.JVM;
import java.util.ArrayList;
/**
* @Author lie
* @Description
*/
/**
* VM options:
* -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
*
* -Xms:初始化内存分配大小 (默认 1/64)
* -Xmx:最大分配内存 (默认 1/4)
* -XX:+PrintGCDetails 打印GC垃圾回收信息
* -XX:+HeapDumpOnOutOfMemoryError 打印OOM信息
*/
public class OomTest {
byte[] array = new byte[1024 * 1024]; //1m
public static void main(String[] args) {
ArrayList<OomTest> list = new ArrayList<>();
int count = 0; //计数器
try {
while (true){
list.add(new OomTest()); //问题所在
count += 1;
}
}catch (Error e){ //要用ERROR捕捉OOM错误
System.out.println("count = "+count); //打印创建了几个对象后OOM
e.printStackTrace();
}
}
}
![](https://img-blog.csdnimg.cn/img_convert/0265e3cf1e00885dd58de1492269263a.png)
运行后看看
![](https://img-blog.csdnimg.cn/img_convert/c93381d169465edf77f15cb245402805.png)
dump出来的文件在这
![](https://img-blog.csdnimg.cn/img_convert/447e7fac2d382ac127dc1242e483843e.png)
![](https://img-blog.csdnimg.cn/img_convert/756e5fd49bc3c22d9c688ee33561b676.png)
用Jprofiler打开,分析并排查原因:
![](https://img-blog.csdnimg.cn/img_convert/1296218d0e69a8c59ea50d8ef12626ab.png)
![](https://img-blog.csdnimg.cn/img_convert/e2f96fe41bfcfe8ce7d27b28dc03ff30.png)
查看线程,找到问题所在
![](https://img-blog.csdnimg.cn/img_convert/b221219bc82fddafe154f5d762225988.png)