ant java vm heap的问题

来源:互联网 发布:跟淘宝联盟一样的软件 编辑:程序博客网 时间:2024/06/05 20:37

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问题