参数配置
这里介绍idea的设置方法,OOM测试代码如下:
import java.util.ArrayList;
import java.util.List;
public class HelloWorld {
public static void main(String[] args) {
List<byte[]> list = new ArrayList<>();
while (true) {
list.add(new byte[1024 * 1024]); // 每次增加一个1M大小的数组对象
}
}
}
修改JVM参数,首先需要添加 Add VM options这个选项,然后将如下参数输入该选项卡。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=c:\oomError\
这里我们将dump路径设为 c:\oomError\,接着,运行这个简单的oom例子。
堆异常文件被成功dump到文件中c:\oomError\java_pid13380.hprof。
hprof堆文件分析
接下来使用visualvm分析这个堆文件。
点击文件->载入,选择c:\oomError\java_pid13380.hprof刚才dump的文件。
然后点击选项卡的概要信息中的 ' 导致 OutOfMemoryError 异常错误的线程: main '
最后得出程序的错误位置
在HelloWorld文件中的第9行,符合我们的定位。