您的位置:首页 > 编程语言 > Java开发

jvm_内存溢出_Java堆溢出

2015-03-11 19:37 344 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: