import java.util.ArrayList;
import java.util.List;
/**
* VM参数 -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
* -Xms : 堆内存最小值(单位M)
* -Xmx : 堆内存最大值(单位M)
*
* -XX:+HeapDumpOnOutOfMemoryError :
* 可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便事后进行分析
*
* */
public class Main {
static class OOMObject{
}
public static void main(String[] args) {
List<OOMObject> list = new ArrayList<>();
while (true){
list.add(new OOMObject());
}
}
}
运行结果:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid18932.hprof ...
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.add(ArrayList.java:458)
at Main.main(Main.java:21)
Heap dump file created [28171839 bytes in 0.095 secs]
Process finished with exit code 1
JProfiler打开快照: