JProfiler分析结果展示
配置
首先我们在IDEA安装JProfiler插件
之后下载JProfiler的软件(有破解版,自行上网搜即可)
然后在IDEA的设置里面找到Tools的JProfiler,设置文件目录对应到exe文件,与你刚安装的软件的目录一致
配置好之后,开始调试
我们先输入一下代码,设置一个ArrayList,无限制往里面添加大对象
public class Hellow {
Byte[] arr = new Byte[1 * 1024 * 1024];
public static void main(String[] args) {
final ArrayList<Object> list = new ArrayList<>();
int count = 0;
try {
while (true) {
list.add(new Hellow());
count++;
}
} catch (OutOfMemoryError error) {
error.printStackTrace();
System.out.println(count);
}
}
}
然后配置JVM内存,目的是为了让堆内存更容易溢出
-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
HeapDumpOnOutOfMemoryError的意思为:Dump出一个关于OOM(OutOfMemory)的hprof文件,以供JProfiler识别
运行之后会出现一个hprof文件
在资源管理器中使用JProfiler打开
点击BiggestOjbects(一般我喜欢使用BiggestOjbects),之后我们可以分析出,是ArrayList出错了,他占用的体积太大了.
之后我们点开线程Thread的main方法,可以看到13行代码出错,这就是OOM的根本原因
除此之外,我们还可以DumpOn其他的错误如下