首页 > 代码库 > JVM【第五回】:【OutOfMemoryError异常之Java堆溢出】

JVM【第五回】:【OutOfMemoryError异常之Java堆溢出】

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

    代码清单中限制Java堆的大小为20MB,不可扩展(将堆的最小值-Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展),通过参数-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存溢出异常时Dump出当前的内存堆转储快照以便时候进行分析。

    

    在Eclipse中的Run Configurations页签中设置虚拟机参数如下图所示:

wKioL1PQceHSRdK-AANtJrYsnL4083.jpg

    

    代码如下: 

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” 博客,转载请与作者联系!