IDEA-java.lang.OutOfMemoryError: Java heap space-内存溢出问题思路,JProfiler监控

菜鸟,有不对的地方希望大神指导,有两种方法来查找问题

1. 设置项目启动参数 生成快照文件

在这里插入图片描述
在VM options中配置:-XX:+HeapDumpOnOutOfMemoryError(此配置是为了在项目根目录生成 java_pidxxxx.hprof文件 也就是快照文件)

后面的-Xms20m -Xmx20m 可以忽略只是测试为了节省时间

2. 情景重现

/**
 * @Author jijl
 * @Description: 无限创建对象导致堆内存爆满
 * @Date 16:07 2018/10/11
 * @Param
 * @return
 **/
public class Main {
    public static void main(String[] args){
        List<User> list = new ArrayList<>();
        int i =0;
        while(true){
            list.add(new User());
            System.out.println("new User()"+i);
            i++;
        }
    }
}

运行后控制台信息

new User()810320
new User()810321
new User()810322
new User()810323
new User()810324
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid4948.hprof ...
Heap dump file created [28238419 bytes in 0.068 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3210)
	at java.util.Arrays.copyOf(Arrays.java:3181)
	at java.util.ArrayList.grow(ArrayList.java:261)
	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
	at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
	at java.util.ArrayList.add(ArrayList.java:458)
	at Main.main(Main.java:15)

Process finished with exit code 1

注意:控制台输出 Dumping heap to java_pid4948.hprof … 表示在根目录生成了java_pid4948.hprof快照文件
在这里插入图片描述
我们就可以下载快照分析工具来分析这个快照文件了,java有很多分析工具可自行下载(也可使用下面的JProfiler),这是一种方法,但是IDEA有更简单的方法。

3. 下载安装快照分析工具
JProfiler下载
4.IDEA 安装JProfiler插件

在这里插入图片描述
安装完之后会多出两个按钮
在这里插入图片描述
接下来我们用新增的第一个那个蓝色按钮启动
会跳出这个页面选择第三个点ok即可
在这里插入图片描述
在这里插入图片描述
点击live memory

在这里插入图片描述
很容易就能分析出 是User类占用内存最多

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值