【学习】idea下生成OOMdump文件并简单分析

2,826 阅读1分钟

今天看了下OOM分析,但是例子是eclipse的,于是我用idea模仿了一个。

首先写一个简单的oom例子:

public class OOMTest {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<>();
        while (true){
            list.add(new Person(1L, "", 1));
        }
    }
}

然后配置一下jvm启动项:

-Xms200m
-Xmx200m
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./

运行main方法,就会发现程序报了oom错误,并打印出了文件名[java_pid8600.hprof],文件路径在jvm启动项自己设置,我设置的是项目根目录下:

然后就是分析文件了,网上的例子是用Eclipse Memory Analyzer,好像还得下eclipse,我嫌麻烦,就用了jdk自带的分析工具Jvisualvm,这个东西在jdk->bin目录下,双击运行jvisualvm.exe就好,然后点左上角的 文件->装入 选择我们的hprof文件,选择的时候需要切换文件类型:

概要下会显示基本信息,我们点导致oom异常错误的线程main:

就能看到报错的位置了:

在类选项卡下也可以看到是什么数据占用了大量内存,这里我们可以看到就是Person类:

到这里就差不多了,由于我也是初学,也只会这么多,有什么不对的地方欢迎大家指正,相互学习。