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

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

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

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快照文件
IDEA-java.lang.OutOfMemoryError: Java heap space-内存溢出问题思路,JProfiler监控_第2张图片
我们就可以下载快照分析工具来分析这个快照文件了,java有很多分析工具可自行下载(也可使用下面的JProfiler),这是一种方法,但是IDEA有更简单的方法。

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

IDEA-java.lang.OutOfMemoryError: Java heap space-内存溢出问题思路,JProfiler监控_第3张图片
安装完之后会多出两个按钮
IDEA-java.lang.OutOfMemoryError: Java heap space-内存溢出问题思路,JProfiler监控_第4张图片
接下来我们用新增的第一个那个蓝色按钮启动
会跳出这个页面选择第三个点ok即可
IDEA-java.lang.OutOfMemoryError: Java heap space-内存溢出问题思路,JProfiler监控_第5张图片
IDEA-java.lang.OutOfMemoryError: Java heap space-内存溢出问题思路,JProfiler监控_第6张图片
点击live memory

IDEA-java.lang.OutOfMemoryError: Java heap space-内存溢出问题思路,JProfiler监控_第7张图片
很容易就能分析出 是User类占用内存最多

你可能感兴趣的:(IDEA-java.lang.OutOfMemoryError: Java heap space-内存溢出问题思路,JProfiler监控)