jvm_内存溢出_Java堆溢出

来源:互联网 发布:什么是数据化 编辑:程序博客网 时间:2024/05/17 23:48

Java堆用于存放对象实例,我们只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,就会在对象数量到达最大堆的容量限制后产生内存溢出异常。

例:
我们手动限制Java堆的大小为20MB,不可扩展(将堆的最小值-Xms参数与最大值-Xmx参数均设置为20M)。设置方法:eclispe中window->preferences->Java->Installed JRE,点击右侧的Edit 按钮,在编辑界面中的“Default VM Arguments ”选项中,填入:-Xms20m -Xmx20m

package jvm;import java.util.ArrayList;import java.util.List;/** * -Xms20m -Xmx20m *  * @author Poison * */public class HeapOOM {    static class OOMObject {        public static void main(String[] args) {            List<OOMObject> list = new ArrayList<HeapOOM.OOMObject>();            while (true) {                list.add(new OOMObject());            }        }    }}

运行结果:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2245)
at java.util.Arrays.copyOf(Arrays.java:2219)
at java.util.ArrayList.grow(ArrayList.java:242)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208)
at java.util.ArrayList.add(ArrayList.java:440)
at jvm.HeapOOM$OOMObject.main(HeapOOM.java:11)

0 0
原创粉丝点击