在使用 jdk 1.5.0_11 在 Linux 下使用 ant 编译项目时,我遇到了 java.lang.OutOfMemoryError: PermGen 错误。同一个项目在windows下编译没有问题。
通常这与分配给 JVM 的 MaxPermSize 有关。Irakli Nadareishvili对 PermGen 错误的最佳解释之一和设置Java HotSpot VMOptions的指南(例如 -XX:MaxPermSize=128M)
在这种情况下,我迅速将问题缩小到特定的bpelc ant 任务
<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
谁能阐明更多?这是一个万无一失的解决方案吗?