绑定Xamarin中的.jar时的Java堆空间OutOfMemoryError

时间:2014-04-29 14:33:09

标签: c# xamarin.android xamarin dalvik

当遵循Xamarin网站上Binding a Java Library的步骤为ArcGIS for Android 10.2.2创建绑定项目时,我能够编译项目。但是,当我尝试部署并运行项目时,我收到以下错误:

COMPILETODALVIK : UNEXPECTED TOP-LEVEL error :
java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2760)
    at java.util.Arrays.copyOf(Arrays.java:2734)
    at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
    at java.util.ArrayList.add(ArrayList.java:351)
    at com.android.dx.ssa.SsaMethod$2.addToUses(SsaMethod.java:474)
    at com.android.dx.ssa.SsaMethod$2.visitPhiInsn(SsaMethod.java:459)
    at com.android.dx.ssa.PhiInsn.accept(PhiInsn.java:323)
    at com.android.dx.ssa.SsaBasicBlock.forEachInsn(SsaBasicBlock.java:990)
    at com.android.dx.ssa.SsaMethod.forEachInsn(SsaMethod.java:729)
    at com.android.dx.ssa.SsaMethod.buildUseList(SsaMethod.java:452)
    at com.android.dx.ssa.SsaMethod.getUseListForRegister(SsaMethod.java:641)
    at com.android.dx.ssa.SCCP.addUsersToWorklist(SCCP.java:116)
    at com.android.dx.ssa.SCCP.simulateStmt(SCCP.java:538)
    at com.android.dx.ssa.SCCP.simulateBlock(SCCP.java:208)
    at com.android.dx.ssa.SCCP.run(SCCP.java:554)
    at com.android.dx.ssa.SCCP.process(SCCP.java:92)
    at com.android.dx.ssa.Optimizer.runSsaFormSteps(Optimizer.java:160)
    at com.android.dx.ssa.Optimizer.optimize(Optimizer.java:100)
    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)

2 个答案:

答案 0 :(得分:25)

<强>更新 正如Blueberry所述,您现在可以通过Xamarin / Visual Studio编辑器编辑此选项:

  

在Xamarin Studio中,您现在可以访问:

     
    

项目选项&gt;构建&gt; Android Build&gt;高级(标签)

  
     

在Visual Studio中,您现在可以转到:

     
    

项目属性&gt; Android选项&gt;高级(标签)

  
     

您可以在那里找到Java堆大小,您可以将其设置为1G。

在Xamarin 4.6及更高版本中,您可以指定Java最大堆大小(JavaMaximumHeapSize),以便覆盖“default java heapsize which is sometimes too low to compile some .jar files.

要指定值,请编辑Android项目的.csproj(而不是绑定项目)并在顶部添加此项(其中1G是您要设置的值)

<PropertyGroup>
    <JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
</PropertyGroup>

有关其他信息,请参阅Xamarin论坛上的this thread

答案 1 :(得分:16)

在Xamarin Studio中,您现在可以访问:

  

项目选项&gt;构建&gt; Android Build&gt;高级(标签)

在Visual Studio中,您现在可以转到:

  

项目属性&gt; Android选项&gt;高级(标签)

您可以在那里找到Java堆大小,您可以将其设置为1G。