JVM(一)初体验-内存溢出问题分析及解决方案

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/ItChuangyi/article/details/80143777
1. 开始
创建Main类和Demo类,在Main类的main方法中创建List,并向List中无限创建Demo对象,造成堆内存溢出,
并输出内存溢出错误文件在项目目录下,为了使等待时间减小,设置运行堆内存大小。
2. 创建Demo类
package com.cheng.test1;
/** 
 * @ClassName: Demo 
 * @Description: TODO
 * @author: Cheng
 * @date: 2018年4月24日 上午11:01:44  
 */
public class Demo {

}
3 创建Main类,造成堆内存溢出
package com.cheng.test1;

import java.util.ArrayList;
import java.util.List;

/** 
 * @ClassName: Main 
 * @Description: Java堆内存溢出
 * @author: Cheng
 * @date: 2018年4月24日 上午11:01:37  
 */
public class Main {

    /** 
     * @Title: main 
     * @Description: TODO 
     * @param args void
     * @author Cheng
     * @date 2018年4月24日上午11:01:37
     */
    public static void main(String[] args) {
        List<Demo> list = new ArrayList<>();
        // Java堆中用于存储对象,通过不断创建对象的方式可以造成堆内存溢出
        while (true) {
            // 将对象放入list中,使GC Roots到对象之间有可达路径,防止垃圾回收机制清除new的对象
            list.add(new Demo());

        }
    }
}
4 运行 Run As ->Run Configurations

运行之前设置JVM参数:

-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m

这里写图片描述

会在项目的目录下生成 java_pid3500.hprof 之类的文件

这里写图片描述

1.1.5 使用Eclipse的MemoryAnalyzer(专业用于分析dump文件的工具,需要自行下载安装)打开文件
分析结果:
这里写图片描述

可以看到 com.cheng.test1.Demo 的对象造成堆内存溢出。

猜你喜欢

转载自blog.csdn.net/ItChuangyi/article/details/80143777
今日推荐