首页 > 代码库 > JVM【第五回】:【OutOfMemoryError异常之Java堆溢出】
JVM【第五回】:【OutOfMemoryError异常之Java堆溢出】
Java堆用于存储对象实例,我们只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,就会在对象数量到达最大堆的容量限制后产生内存溢出异常。
代码清单中限制Java堆的大小为20MB,不可扩展(将堆的最小值-Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展),通过参数-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便时候进行分析。
在Eclipse中的Run Configurations页签中设置虚拟机参数如下图所示:
代码如下:
package oom; import java.util.ArrayList; import java.util.List; /** * JAVA堆溢出 * @author Madison * @date 2014-7-11 * VM Args: -Xms20M -Xmx20M -XX:+HeapDumpOnOutOfMemoryError */ 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()); } }
运行结果:
java.lang.OutOfMemoryError:Java Heap space
Dumping Heap to java_pid3404.hprof...
Heap dump file created[22045981 bytes in 0.663 secs]
本文出自 “2377209” 博客,转载请与作者联系!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。