代码程序
import java.util.ArrayList;
import java.util.List;
public class MyHeapOutOfMemDemo{
static class OOMObject{
}
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject>();
while(true){
list.add(new OOMObject());
}
}
}
执行步骤
- 编译
javac MyHeapOutOfMemDemo.java
- 运行
java java -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError MyHeapOutOfMemDemo
运行结果
在运行目录生成java_pid2342.hprof文件。
用JProfiler打开如图:
根据图看出MyHeapOutOfMemDemo对象创建太多,占用了堆内存,导致内存溢出。
总结
-XX:+HeapDumpOnOutOfMemoryError
当堆内存空间溢出时输出堆的内存快照。
-XX:HeapDumpPath=/var/log/...
指定输出文件目录