首页风格
门户
博客

两种常见类型的内存溢出错误 - Java out of memory error

Java的Web应用程序运行过程中,我们往往会遇到Out of memory的异常错误。一般包括两种类型的错误信息,如下:

1. java.lang.OutOfMemoryError: Heap space

这种类型的内存错误一般在于堆内存容量不够,一般可以提供调整堆内容分配来解决。将-Xms和-Xmx选项值调大,一般为物理内存80%。

JAVA_OPTS="-server -Xms800m -Xmx800m -XX:MaxNewSize=256m"

2. java.lang.OutOfMemoryError: PermGen space

这种类型的内容错误比较不常见,但是一旦遇到比较头疼。首先我们了解一下这个错误,一般情况下,为了优化目的,Generation中管理着可以做垃圾回收的堆,Generation本身是用来保存对象的不同内容片断。垃圾回收的算法在不同的generation里是不同的。年轻的Generation里保存了比较年轻的对象,因此大多数的对象都在那里被回收。当年轻Generation快满了将会导致一个小面积的垃圾回收。当有大量的对象需要销毁时,这种小面积回收就会加快。保存下来的对象将会被移动到保有Generation里。当保有Generation需要垃圾回收时,会调动大面积回收机制。这种机制因为处理的都是活跃对象所以比较慢。除了上面俩个Generation,这里还有一个永久保留Generation,它用来存放描述Meta data的类信息。一般这个位置是留给JVM自己调用的空间。PermGen是Permanent Generation的缩写。大量代码的程序会很快的填满这个内存片断。因此导致java.lang.OutOfMemoryError: PermGen Space

SUN JVM一般可以使用-XX:PermSize选项来启动虚拟机。我们可以设计最大的永久保留generation,如下:

-XX:MaxPermSize=128m

Sun的JVM缺省值如下:

JDK 1.3.1_06     Initial Size     Maximum Size
Client JVM        1MB              32MB
Server JVM       1MB              64MB

JDK 1.4.1_01     Initial Size     Maximum Size
Client JVM        4MB              64MB
Server JVM       4MB              64MB

JDK 1.4.2         Initial Size     Maximum Size
Client JVM       4MB              64MB
Server JVM      16MB             64MB

JDK 1.5.0         Initial Size     Maximum Size
Client JVM       8MB              64MB
Server JVM      16MB             64MB

原文出处:两种常见类型的内存溢出错误 - Java out of memory error

喜欢我们的文章请您与朋友分享:

?ü?à

留言

友情提示: 本站博客不再支持访客留言,如果有问题或者留言,请发布到  GBtags.com

  1. 目前没有任何留言
今日推荐