默認情況下,<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