深入理解java虚拟机--OutOfMemoryError

来源:互联网 发布:第二梦软件 编辑:程序博客网 时间:2024/05/22 16:58

1、堆溢出

Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收实例对象,就会在对象数量达到堆最大容量时产生OutOfMemoryError异常。

举例:

说明(虚拟机参数堆的最小值-Xms与最大值-Xmx相同是为了避免堆动态扩展,-XX:+HeapDumpOnOutOfMemoryError可以让java虚拟机在出现内存溢出异常时时产生当前堆内存快照以便进行异常分析。

/*
 * VM Args: -Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError
*/
public class HeapOOM {
static class OOMObejct{}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<OOMObejct> list = new ArrayList<OOMObejct> ();
while(true){
list.add(new OOMObejct());
}
}
}

运行结果:

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid7640.hprof ...
Heap dump file created [22063830 bytes in 0.320 secs]

0 0
原创粉丝点击