Question

I am developing an android app on Eclipse Juno running on Windows 7 64bit (8GB ram) So I have my android project and I place some jar files in the /lib folder so I can use them in my app. This is fine, up until I add the xalan.jar file which is needed as a dependency for an apache xml parser.

When I try to run/deploy my app from eclipse so it can run on my phone, I start seeing compiler warnings in the console complaining about classes from xalan.jar and then Eclipse crashes with a out-of-memory heap space exception.

!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)

I tried searching online but closest thing I found was a stackoverflow question Eclipse crashing, getting heap exceptions - Out of Memory when trying to deploy an Android applicaiton which instructs to increase the heap-space memory. Which I did from 256m to 1024 and I still get the error.

I remove xalan.jar and everything deploys normally. Are there any solutions to this?

------------EDIT-------------

After updating max memory to 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)
Was it helpful?

Solution

I found you something definitive. From www.xom.nu:

Java 1.3 and earlier do not have a built-in XML parser so in these environments you'll also need to install XOM's supporting libraries. These include xalan.jar, xercesImpl.jar, normalizer.jar, and xml-apis.jar, and are found in the lib directory. The versions shipped with XOM are quite a bit faster and less buggy than the ones bundled with the JDK, so you may well want to use them even in Java 1.4 and later. For example,

$ 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

You can leave out xalan.jar if you don't use any of the classes in nu.xom.xslt. normalizer.jar is needed in all versions of Java. However, it's only actually used by the setUnicodeNormalizationFormC() method in Serializer. If you don't call this method, you can omit this archive in space-limited environments. junit.jar is only used for testing, and is not needed for normal operation of XOM.

So leave off xalan.jar. Android's native javax.xml.transform does all that work already (as of API 8).

Incidentally, looks like you may be able to drop some other jars as well.

OTHER TIPS

This error might be cause by the default Eclipse configuration for the JVM. Make sure you add some more space to your JVM heap.

-Xms512M -Xmx2048M

Here are some references on how to accomplish this

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

Also, double check that you have your ADT plugin and Android SDK tools updated.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top