【问题标题】:java.lang.OutOfMemoryError during android 2.1 build on Mac OS X 10.6.8在 Mac OS X 10.6.8 上构建 android 2.1 期间的 java.lang.OutOfMemoryError
【发布时间】:2011-09-23 04:45:06
【问题描述】:

这是我正在努力解决的构建问题。我正在尝试使用 jdk 1.5 在 Mac OS X 10.6.8 上构建 Android 2.1。 “make”命令运行了一段时间,最后,它说:

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: Java heap space
    at com.sun.tools.javac.code.Scope.dble(Scope.java:150)
    at com.sun.tools.javac.code.Scope.enter(Scope.java:185)
    at com.sun.tools.javac.comp.MemberEnter.importAll(MemberEnter.java:129)
    at com.sun.tools.javac.comp.MemberEnter.visitTopLevel(MemberEnter.java:504)
    at com.sun.tools.javac.tree.Tree$TopLevel.accept(Tree.java:382)
    at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:383)
    at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:778)
    at com.sun.tools.javac.code.Symbol.complete(Symbol.java:355)
    at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:612)
    at com.sun.tools.javac.comp.Enter.complete(Enter.java:463)
    at com.sun.tools.javac.comp.Enter.main(Enter.java:441)
    at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:404)
    at com.sun.tools.javac.main.Main.compile(Main.java:592)
    at com.sun.tools.javac.main.Main.compile(Main.java:544)
    at com.sun.tools.javac.Main.compile(Main.java:92)
    at util.build.JavacBuildStep.build(JavacBuildStep.java:69)
    at util.build.BuildDalvikSuite.handleTests(BuildDalvikSuite.java:504)
    at util.build.BuildDalvikSuite.compose(BuildDalvikSuite.java:170)
    at util.build.BuildDalvikSuite.main(BuildDalvikSuite.java:136)
main javac dalvik-cts-buildutil build step failed
make: *** [out/host/darwin-x86/obj/EXECUTABLES/vm-tests_intermediates/tests] Error 1

好像是java堆大小不够。我在谷歌上搜索了这个问题,它给了我几个链接,例如:

这些页面主要建议在 JVM 选项中添加“-Xmx”选项。我尝试了以下方法: 在“/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0-leopard/Resources/Info.plist”中添加了这一列

虚拟机选项 -Xms1024M -Xmx2048M

(我也尝试设置 VMOptions.x86_64 而不是 VMOptions)。

按照另一个链接 (osdir.com/ml/android-platform/2010-06/msg00097.html),我还在 android 构建目录中的 build/core/definitions.mk 文件中更改了以下行。

$(hide) java -Xmx512M -jar $(HOST_OUT_JAVA_LIBRARIES)/proguard-4.0.1.jar \

$(hide) java -Xmx2048M -jar $(HOST_OUT_JAVA_LIBRARIES)/proguard-4.0.1.jar \

以上都没有帮助。我有几个问题:

  • 是否可以更改系统范围 Mac OS X 上的 java 堆大小,这是正确的方法吗?如果是这样,我在 Info.plist 文件中所做的更改是否可以实现?
  • 还是我必须更改堆大小 专门用于android构建?如果是这样,我应该怎么做?

编辑

只是一个更新:我尝试使用 jdk 1.6 构建 android 3.1,构建运行良好。 (即使没有为 jdk 1.6 设置“-Xmx”选项)。我仍然不知道用 jdk 1.5 构建 2.1 时有什么问题。

【问题讨论】:

  • 我们可以看一下make文件吗?

标签: java android macos build out-of-memory


【解决方案1】:

有时OutOfMemoryError 并不缺少Heap。尝试增加PermGen

-XX:PermSize=40m
-XX:MaxPermSize=240m

有时也是由YoungTernured 的尺寸不合适引起的。而其他一些人由于长时间使用Full GC 而收集的百分比很低。

问候。

【讨论】:

  • Udo,谢谢您的回复。我应该在哪里设置这些选项?我是 Android/Java 新手。所以我对虚拟机了解不多。其次,我寻找我得到的错误。它是“java.lang.OutOfMemoryError: Java heap space” 当我搜索 permgen 时,当一个人有“java.lang.OutOfMemoryError: PermGen space”时需要进行这些设置在这种情况下,设置这些选项会有所帮助我来解决我的问题?
  • 我会选择 build/core/definitions.mk。如果可行,我将更新我的答案以说明这一点。这可能会有所帮助,因为它在 perm 大小上配置了 max mem。为堆留出更多空间。
【解决方案2】:

我认为有一种单独的方法可以提高 dexing 操作的堆限制。将此添加到您的 build.gradle 文件中的 android 闭包中:

dexOptions {

    javaMaxHeapSize "4g"

}

看看有没有帮助。

查看此链接: https://groups.google.com/forum/#!topic/adt-dev/r4p-sBLl7DQ

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2012-01-08
    • 2013-09-23
    • 1970-01-01
    • 2013-08-01
    • 2012-01-06
    相关资源
    最近更新 更多