繁体   English   中英

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

[英]What is the correct way to set ANT_OPTS in OS X?

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

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

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

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

在我输入的同一个shell中

export ANT_OPTS =“ - Xmx1024m'ant build

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

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

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

更新:

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

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

如果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'

要回答更新的问题,默认的最大堆会根据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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM