在OS X中设置ANT_OPTS的正确方法是什么?

时间:2009-08-31 23:48:58

标签: java macos ant

我在OS X(Snow Leopard)上编译现有项目时遇到'错误:Java堆空间,java.lang.OutOfMemoryError:Java堆空间'。

我使用的是默认的Java 1.6 64位SDK,以及Ant的默认安装(两者都是作为操作系统的一部分提供)。

我在其他操作系统环境中遇到过这个问题,通常使用ANT_OPTS来增加分配的内存来解决这个问题,但这似乎没有用。

我尝试按如下方式设置ANT_OPTS:

在我输入的同一个shell中

export ANT_OPTS =“ - Xmx1024m' 蚂蚁构建

我也尝试在〜/ .bash_profile中设置值(我采购它以确保它被拾取)。

我最终通过在Ant脚本中增加javac任务中的内存来解决内存问题,但这并不理想(我更愿意使用ANT_OPTS)。

在OS X中运行Ant时,增加堆内存量的正确方法是什么?

更新:

看来我错了,ANT_OPTS被视为例外。问题是我正在分配javac任务(如下面的bkail所述)。

这引出了我的下一个问题。当相同的代码/ ant脚本在Linux上正常工作时,为什么JAVAC进程在OSX上的内存不足? Java的默认OSX安装有什么不同,这意味着需要额外的内存分配?

2 个答案:

答案 0 :(得分:2)

如果javac memoryMaximumSize设置有任何影响,那么你的javac必须是fork =“true”,这意味着javac JVM与Ant JVM是分开的,这意味着你的ANT_OPTS对javac JVM没有影响。您需要手动传播-Xmx设置。像这样:

<project>
  <script language="javascript"><![CDATA[
    importClass(java.lang.Runtime)
    project.setProperty("memoryMaximumSize", Runtime.getRuntime().maxMemory());
  ]]></script>
  <javac srcdir="." memoryMaximumSize="${memoryMaximumSize}" fork="true"/>
</project>

ant -verbose确认设置正在传播到分叉的javac:

[javac] Compilation arguments:
[javac] '-J-Xmx520290304'

答案 1 :(得分:1)

要回答更新的问题,默认的最大堆会根据JVM是将系统分类为“客户端”还是“服务器”而有所不同。如果归类为“服务器”,则默认最大堆根据系统上的可用内存而变化。有关更多信息,请参见此处:

http://java.sun.com/docs/hotspot/gc5.0/ergo5.html

java -version应该显示正在选择哪个VM:

java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)