代碼程序
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());
}
}
}
執(zhí)行步驟
- 編譯
javac MyHeapOutOfMemDemo.java
- 運行
java java -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError MyHeapOutOfMemDemo
運行結(jié)果

image.png
在運行目錄生成java_pid2342.hprof文件。
用JProfiler打開如圖:

image.png
根據(jù)圖看出MyHeapOutOfMemDemo對象創(chuàng)建太多,占用了堆內(nèi)存,導(dǎo)致內(nèi)存溢出。
總結(jié)
-XX:+HeapDumpOnOutOfMemoryError
當(dāng)堆內(nèi)存空間溢出時輸出堆的內(nèi)存快照。
-XX:HeapDumpPath=/var/log/...
指定輸出文件目錄