这是我正在努力解决的构建问题。我正在尝试使用 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 heap size不够了。我在 Google 上搜索了这个问题,它给了我几个链接,例如:
- How to deal with "java.lang.OutOfMemoryError: Java heap space" error (64MB heap size)
- Change Java heap size on a Mac
这些页面主要是建议在JVM Options中添加“-Xmx”选项。我尝试了以下内容: 在/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0-leopard/Resources/Info.plist 中添加了此列”
VMOptions -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 时出现了什么问题。
最佳答案
有时 OutOfMemoryError
并非由于 Heap
不足。尝试增加 PermGen
:
-XX:PermSize=40m
-XX:MaxPermSize=240m
有时也是由 Young
和 Ternured
尺寸不佳引起的。还有一些人应该长时间执行 Full GC
并且收集的百分比很低。
问候。
关于在 Mac OS X 10.6.8 上构建 android 2.1 期间出现 java.lang.OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487980/