jvm内存溢出的各种

java.lang.OutOfMemoryError: PermGen space

实际上是class加载后,一直没有被释放,挺烦的:)

改一些jvm参数就ok了

所以修改了ant

set ANT_OPTS=-Xms128m -Xmx512m -XX:MaxPermSize=300m

这里再介绍一下JVM发生OOM的几种情况:

1、java.lang.OutOfMemoryError: Java heap space

这是我们平常理解的OOM,是由于heap space确实没有空间分配,这种一般是由于内存泄漏导致,也有可能是heap space设置太小。需要具体分析

2、java.lang.OutOfMemoryError: PermGen space

jvm 规范里面有定义一个method space,这里主要放classes和method list和一个string pool,string有一个intern方法,通过这个方法定义的string都放在这里(好像不常用),这里设置不太小会导致OOM,缺省64M,主要由于现在应用依赖的第三方类越来越多,导致这类问题频繁发生,需要引起重视

3、Requested array size exceeds VM limit
这种是由于申请的array size超出了heap space大小,比如在一个256M的heap space中申请一个512M的array,这种基本都是应用bug导致

4、request <size> bytes for <reason>. Out of swap space?
这种是由于heap size设置相对于系统物理内存太大,导致系统swap space不足,这种的解决办法就是减小heap size大小

5、<reason> <stack trace> (Native method)
这种估计是最麻烦的了,也是最少碰到的,是由于jni或native method导致,如果自己没有写这类的东西,基本可以说是jdk问题

本文出处:http://hi.baidu.com/jeffeyliu/item/945d191663e68b711109b52a


这篇应该说是比较全面的记录了各种内存溢出的情况,转过来,备查。不过上面也有同样情况下需要其他处理方法的,这个都说不准

你可能感兴趣的:(jvm内存溢出的各种)