还有什么我可以做的事情来处理运行Ant(命令行)的"GC Overhead Limit Exceeded"吗?

Joh*_*ice 5 java ant android

我正在尝试使用命令行Ant 编译一个非常大的多项目Android项目.我最初使用Ant 1.8.3,但后来升级到1.8.4(结果是徒劳).虽然我安装了Eclipse(Indigo,今天更新),但是这个项目的性质阻止了在Eclipse中使用Ant.

代码似乎生成正常,但当它到达操作的"dex"阶段时,它会得到两个错误之一,具体取决于我ANT_OPTS:"GC Overhead Limit Exceeded"或"Java Heap Space".

我用Google搜索并检查了Stack.发现各个环节后(参见这里,这里,该协议栈的问题,而这个问题堆栈,以及),我修改了蚂蚁的选择.(许多链接涵盖了在执行Java代码时发生的情况;我的问题实际上是在Ant进程中创建Android APK以进行上载).

我的ANT_OPTS环境变量目前是:

-Xms4g -Xmx4g -Xmn256m -XX:PermSize=256m -XX:MaxPermSize=1024m -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=8
Run Code Online (Sandbox Code Playgroud)

我尝试完全关闭GC Overhead Limit -XX:-UseGCOverheadLimit ,但所有这一切都是给我一个Java Heap Space错误而不是GC Overhead Limit错误.我曾经问过我的同事,但他们也没有想法.

哦,还有一个"细节":我可以使用Eclipse来编译和加载项目,这看起来似乎"很好"; 然而,这个"元项目"所需的大量项目表明我试图让Ant脚本工作.

系统信息:

  • 操作系统:Windows 7 64位
  • Java:Sun,1.6,64位
  • 物理内存:8Gb
  • Android:SDK工具:R20; 平台工具:R12(今天更新,6月28日)

我还能做些什么吗?另一个要搜索的关键字?别的地方看?

Joh*_*ice 4

对这个问题的部分回答。感谢当前的受访者,他们帮助我找到了这个问题。

显然,Java VM 选择有两个(可能是三个?)不同的地方需要更改,具体取决于错误发生的位置。在这种情况下,它们ANT_OPTS不会传递给 Dex。

我能够通过编辑 DX 批处理文件来解决该错误,更改:

set defaultXmx=-Xmx1024M
Run Code Online (Sandbox Code Playgroud)

set defaultXmx=-Xmx4096M
Run Code Online (Sandbox Code Playgroud)

然而显而易见的是:我永远不需要更改 dx 批处理文件。有人知道更改 Ant 传递给 Dex 的 Java 选项的“正确”方法吗?