java.lang.OutOfMemoryError Demo

代码程序

import java.util.ArrayList;
import java.util.List;
 
public class MyHeapOutOfMemDemo{
    static class OOMObject{
        
    }
    
    public static void main(String[] args) {
        List list = new ArrayList();
        while(true){
            list.add(new OOMObject());
        }
    }

}

执行步骤

  1. 编译
javac MyHeapOutOfMemDemo.java
  1. 运行
java java -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError MyHeapOutOfMemDemo

运行结果

java.lang.OutOfMemoryError Demo_第1张图片
image.png

在运行目录生成java_pid2342.hprof文件。
用JProfiler打开如图:


java.lang.OutOfMemoryError Demo_第2张图片
image.png

根据图看出MyHeapOutOfMemDemo对象创建太多,占用了堆内存,导致内存溢出。

总结

-XX:+HeapDumpOnOutOfMemoryError 

当堆内存空间溢出时输出堆的内存快照。

 -XX:HeapDumpPath=/var/log/... 

指定输出文件目录

你可能感兴趣的:(java.lang.OutOfMemoryError Demo)