版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/ItChuangyi/article/details/85522448
####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: TODO
* @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<>();
// 内存溢出
while(true){
list.add(new Demo());
}
}
}
4、运行 Run As ->Run Configurations
-XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m
-XX:+HeapDumpOnOutOfMemoryError:可以让虚拟机在堆内存溢出时Dump出当前的内存堆转储快照,会保存
在项目目录下,用于分析;
-Xms20m -Xmx20m:将堆得最小值-Xms参数与最大值-Xmx设置成一样,则堆大小不会自动扩展。
会在项目的目录下生成 java_pid1888.hprof 之类的文件
5、使用Eclipse的MemoryAnalyzer打开文件
分析结果:
可以看到 com.cheng.test1.Demo 造成内存溢出