默认情况下,<javac>
与Ant在进程中运行。一旦JVM进程启动,您就无法调整JVM进程“Xms
”和“Xmx
”,这是Java的一般限制。所以,你所看到的错误消息是软件拒绝你试图违反这个原则(使用无益的,不友好的错误信息。)
但是,如果你在<javac>
标签指定属性fork="true"
你会能够指定新的Xms
和Xms
。这是因为fork
指示Ant启动运行javac
的新JVM子进程。由于JVM过程是新的,因此它为Ant提供了一个可接受的机会来为其指定Xms
和Xmx
。
你可以尝试这样的事情:
<project name="project" default="all" basedir="[yourvalue]">
<target name="all">
<javac srcdir="[yourvalue]" destdir="[yourvalue]" fork="true">
<!-- javac requires that -Xmx and -Xms be prefixed with -J -->
<compilerarg line="-J-Xms128m -J-Xmx512m" />
</javac>
</target>
</project>
(请注意,我用的compilerarg line=""
而不是compilerarg value=""
的line
属性可以指定多个空格分隔的参数的value
属性是传递。单参数)
蚂蚁会等分叉<javac>
退出,这是在javac
过程完成其工作之后发生的。编译)。然后,Ant继续在其原有的JVM进程中运行构建脚本。 Ant会检查分叉javac
是否失败或成功,并根据此信息采取常规操作。
性能
它通常是更好的性能,以不叉javac
,而是简单地调整总体初始蚂蚁JVM相关的内存设置。这通常是(但并非总是)最好的选择,因为启动单独的JVM通常速度较慢,并且需要的内存比简单地允许javac
在进程中运行更多。
如果您使用的是蚂蚁提供的ant.bat
或ant.sh
推出蚂蚁,一个简单的方法来调整Ant的Xms
和Xmx
是定义环境变量ANT_OPTS来包含你需要的参数。有许多方法来设置环境变量,但你可能只是编辑ant.bat
:
set ANT_OPTS=-Xms128m -Xmx512m
是它的复制/粘贴错误的错误消息说,不同的价值比一个提供(32米/ 128M)? – 2010-11-09 14:37:03
也许你需要将每个参数传递到单独的 元素中? –
ZeissS
2010-11-09 15:02:56
@ZeissS:单独的' '元素会导致相同的错误,不幸的是 –
2010-11-09 15:14:17