jvm笔记- java堆内存溢出-实战:OutOfMemoryError 异常
Java 堆溢出
Java堆用于存储对象实例,只要不断地创建对象,并且保证 GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常。
代码限制Java堆的大小为20M,不可扩展(将堆的最小值-Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展),通过参数 -XX:+HeapDumpOnOutOfMemoryError 可以让虚拟机在出现内存溢出异常时Dump出当前的内存转储快照以便事后进行分析
参数配置如图所示:
代码如下:
/**
* VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
*/
public class HeapOOM {
static class OOMObject{
}
public class void main(String[] args) {
List<OOMObject> list = new ArrayList<OOMObject)();
while(true) {
list.add(new OOMObject());
}
}
}
运行结果: