我正在开发一个运行在Windows 7 64bit(8GB ram)上的Eclipse Juno的Android应用程序所以我有我的android项目,我在/ lib文件夹中放置了一些jar文件,所以我可以在我的应用程序中使用它们。这很好,直到我添加xalan.jar文件,这是一个apache xml解析器的依赖项。
当我尝试从eclipse运行/部署我的应用程序以便它可以在我的手机上运行时,我开始在控制台中看到编译器警告抱怨来自xalan.jar的类,然后Eclipse崩溃并带有内存不足的堆空间异常。
!ENTRY com.android.ide.eclipse.adt 4 0 2013-01-20 21:04:37.427
!MESSAGE Unable to execute dex: Java heap space
!STACK 0
java.lang.OutOfMemoryError: Java heap space
at com.android.dx.ssa.SsaBasicBlock.getRopLabelSuccessorList(SsaBasicBlock.java:393)
at com.android.dx.ssa.back.SsaToRop.convertBasicBlock(SsaToRop.java:299)
at com.android.dx.ssa.back.SsaToRop.convertBasicBlocks(SsaToRop.java:260)
at com.android.dx.ssa.back.SsaToRop.convert(SsaToRop.java:124)
at com.android.dx.ssa.back.SsaToRop.convertToRopMethod(SsaToRop.java:70)
at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:102)
at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:73)
at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:273)
at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:134)
at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:87)
at com.android.dx.command.dexer.Main.processClass(Main.java:487)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
at com.android.dx.command.dexer.Main.access$400(Main.java:67)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
at com.android.dx.command.dexer.Main.processOne(Main.java:422)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333)
at com.android.dx.command.dexer.Main.run(Main.java:209)
at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:187)
at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:745)
at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:598)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:321)
at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:396)
at org.eclipse.core.internal.resources.Project$1.run(Project.java:618)
我尝试在线搜索,但我发现的最接近的事情是stackoverflow问题Eclipse crashing, getting heap exceptions - Out of Memory when trying to deploy an Android applicaiton,它指示增加堆空间内存。我从256m到1024做了什么,我仍然得到错误。
我删除了xalan.jar,一切都正常部署。这有什么解决方案吗?
------------ EDIT -------------
将最大内存更新为2048后
java.lang.OutOfMemoryError: GC overhead limit exceeded
at com.android.dx.util.IntList.<init>(IntList.java:87)
at com.android.dx.rop.code.RopMethod.calcPredecessors(RopMethod.java:174)
at com.android.dx.rop.code.RopMethod.labelToPredecessors(RopMethod.java:95)
at com.android.dx.ssa.SsaBasicBlock.newFromRop(SsaBasicBlock.java:158)
at com.android.dx.ssa.SsaMethod.convertRopToSsaBlocks(SsaMethod.java:174)
at com.android.dx.ssa.SsaMethod.newFromRopMethod(SsaMethod.java:104)
at com.android.dx.ssa.SsaConverter.convertToSsaMethod(SsaConverter.java:45)
at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:99)
at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:73)
at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:273)
at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:134)
at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:87)
at com.android.dx.command.dexer.Main.processClass(Main.java:487)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459)
at com.android.dx.command.dexer.Main.access$400(Main.java:67)
at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
at com.android.dx.command.dexer.Main.processOne(Main.java:422)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:333)
at com.android.dx.command.dexer.Main.run(Main.java:209)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.android.ide.eclipse.adt.internal.build.DexWrapper.run(DexWrapper.java:187)
at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:745)
at com.android.ide.eclipse.adt.internal.build.builders.PostCompilerBuilder.build(PostCompilerBuilder.java:598)
at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:728)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:199)
答案 0 :(得分:1)
我找到了一些确定的东西。来自www.xom.nu:
Java 1.3及更早版本没有内置的XML解析器,因此在这些环境中,您还需要安装XOM的支持库。这些包括xalan.jar, xercesImpl.jar,normalizer.jar和xml-apis.jar,可以在lib目录中找到。 XOM附带的版本比JDK捆绑的版本更快,更少,因此您甚至可能希望在Java 1.4及更高版本中使用它们。例如,
$ java -classpath xom-samples.jar:xom-1.1.jar:lib / xml-apis.jar:lib / xercesImpl.jar:lib / normalizer.jar:lib / xalan.jar nu.xom.samples。 PrettyPrinter filename.xml
如果你不使用nu.xom.xslt中的任何类,你可以省略xalan.jar。所有版本的Java都需要normalizer.jar。但是,它实际上只是由Serializer中的setUnicodeNormalizationFormC()方法使用。如果不调用此方法,则可以在空间有限的环境中省略此存档。 junit.jar仅用于测试,XOM的正常操作不需要。
所以请离开xalan.jar。 Android的本机javax.xml.transform已经完成所有工作(从API 8开始)。
顺便说一句,看起来你也可以放弃其他一些罐子。
答案 1 :(得分:0)
此错误可能是由JVM的默认Eclipse配置引起的。 确保为JVM堆添加更多空间。
-Xms512M -Xmx2048M
以下是有关如何完成此操作的一些参考资料
http://edwards.sdsu.edu/research/index.php/daniel/236-increasing-heap-size-in-eclipse
http://wiki.eclipse.org/FAQ_How_do_I_increase_the_heap_size_available_to_Eclipse%3F
另外,请仔细检查您的ADT插件和Android SDK工具是否已更新。