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

运行结果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章