我在用JDK1.5.0.0在Linux下用Ant编译项目时遇到了java.lang.outofmemoryError:PermGen错误。同一个项目在Windows下编译没有问题。
通常这与分配给JVM的maxpermsize有关。Irakli Nadareishvili有一个 best explanations of PermGen errors 以及设置指南 Java HotSpot VMOptions (例如-xx:maxpermsize=128m)
在这种情况下,我很快把问题缩小到一个特定的问题 bpelc 蚂蚁任务
<bpelc input="${build.dir}/bpel/bpel.xml" out="${build.dir}/output" rev="${version}" home="${bpel.home}"/>
现在,我不认为BPELC采用类似javac的compilerArg元素:
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="libraries"> <compilerarg value="-XX:MaxPermSize=128M"/> </javac>
那么如何修复BPELC任务的错误呢?到目前为止,我提出的最佳解决方案是 ANT_OPTS 环境变量。到目前为止,这似乎已经避免了这个问题。
export ANT_OPTS=-XX:MaxPermSize=128m
有人能发出更多的光吗?这是一个确定的消防措施吗?
当 bpelc 任务在运行Ant的原始JVM中执行,然后设置 ANT_OPTS (或类似的东西)是唯一可能的解决办法。
bpelc
ANT_OPTS
一个类似的事情可能是将该任务重构为第二个Ant构建文件,并使用单独的JVM运行该文件。不是很好,但根据您的环境,可能更容易实现。