java.lang.OutOfMemoryError Demo

2018-07-31  本文已影响0人  探戏者

代码程序

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());
        }
    }

}

执行步骤

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

运行结果

image.png

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


image.png

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

总结

-XX:+HeapDumpOnOutOfMemoryError 

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

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

指定输出文件目录

上一篇 下一篇

猜你喜欢

热点阅读