JVM调优之使用JProfiler工具分析java堆内存溢出OOM原因

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其他的错误如下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值