参数配置

这里介绍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\

Idea设置JVM启动参数

这里我们将dump路径设为 c:\oomError\,接着,运行这个简单的oom例子。

JVM设置OOM自动堆快照

堆异常文件被成功dump到文件中c:\oomError\java_pid13380.hprof。

hprof堆文件分析

接下来使用visualvm分析这个堆文件。

点击文件->载入,选择c:\oomError\java_pid13380.hprof刚才dump的文件。

然后点击选项卡的概要信息中的 '  导致 OutOfMemoryError 异常错误的线程: main '

JVM设置OOM自动堆快照

最后得出程序的错误位置

JVM设置OOM自动堆快照

在HelloWorld文件中的第9行,符合我们的定位。