Android Studio Google JAR文件导致GC开销限制超出错误

aml*_*ker 201 java android overhead

我在OS X上使用Android Studio.我收到此错误消息:

FAILURE:构建因异常而失败.

  • 出了什么问题:任务':app:preDexDebug'执行失败.com.android.ide.common.internal.LoggedErrorException:无法运行命令:/ Applications/Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output/Users/alex/AndroidStudioProjects/SilentSMS/app/build/intermediates/pre-dexed/debug/android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_r2.1.jar

    错误代码:3输出:

  UNEXPECTED TOP-LEVEL ERROR:
  java.lang.OutOfMemoryError: GC overhead limit exceeded
      at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665)
      at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:288)
      at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
      at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:412)
      at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
      at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:782)
      at com.android.dx.cf.code.Ropper.doit(Ropper.java:737)
      at com.android.dx.cf.code.Ropper.convert(Ropper.java:346)
      at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:282)
      at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
      at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
      at com.android.dx.command.dexer.Main.processClass(Main.java:682)
      at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
      at com.android.dx.command.dexer.Main.access$600(Main.java:78)
      at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
      at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
      at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
      at com.android.dx.command.dexer.Main.processOne(Main.java:596)
      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
      at com.android.dx.command.dexer.Main.run(Main.java:230)
      at com.android.dx.command.dexer.Main.main(Main.java:199)
      at com.android.dx.command.Main.main(Main.java:103)
Run Code Online (Sandbox Code Playgroud)

我正在使用这个库:

http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/

我删除了JAR文件并将其添加到我的项目中 - 我正在尝试构建的项目是:

https://github.com/domi007/silentSMS/

我理解这是因为我的xms和xmx值太低了.我增加了它们:

/ Applications/Android Studio.app/bin/idea.vmoptions现在它说:

-Xms256m
-Xmx1024m
Run Code Online (Sandbox Code Playgroud)

但是,我仍然得到错误.这可能是由什么引起的?除了silentSMS应用程序是一个Eclipse项目,我将代码移植到Android Studio,我没有改变任何东西.就Android Studio发现错误而言 - 它没有,其他一切看起来都很好.

Com*_*are 535

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

dexOptions {
    javaMaxHeapSize "4g"
}
Run Code Online (Sandbox Code Playgroud)

看看是否有帮助.

(想法由Scott Barta提供的答案)

  • `4g`有点矫枉过正,`2g`还可以 (42认同)
  • 我添加了这个,但我仍然看到`OutOfMemoryError` (6认同)
  • 不适用于我,需要使用gradle.properties:`org.gradle.jvmargs = -XX:MaxPermSize = 1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize = 1024m` (5认同)
  • 太棒了!这也解决了我的错误.我发现我给它的内存越多,构建的速度越快.我从1分钟到19秒. (3认同)
  • 我仍然收到错误:java.lang.OutOfMemoryError:GC开销超出了java.util.BitSet.clone的[org.gradle.api.internal.project.ant.AntLoggingAdapter] ** (2认同)

Dhr*_*val 89

在我的例子中,增加堆大小看起来像这样:

使用Android Studio 1.1.0

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "2048M"
    }
}
Run Code Online (Sandbox Code Playgroud)

将上面的代码放在Build.gradle文件中.

  • 在我启用Multidexing后,这有助于克服"超出GC的开销限制".例外是在com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)中. (4认同)

小智 39

这个新问题是由最新版本的Android引起的.

转到项目根文件夹,打开gradle.properties,然后添加以下选项:

org.gradle.daemon=true

org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

org.gradle.parallel=true

org.gradle.configureondemand=true
Run Code Online (Sandbox Code Playgroud)

然后在build.gradle文件中添加以下更改:

dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
}
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我在Android Studio 2.1 Beta 2上的问题. (4认同)
  • 警告:不推荐使用 `android.dexOptions.incremental` 属性,它对构建过程没有影响。 (2认同)

eri*_*icn 10

安卓工作室 3.5.3

在首选项/设置下找到内存设置(Mac 上的 Cmd + Shift + A 或单击“帮助”并开始键入“内存设置”)并增加 IDE 堆大小和/或守护进程堆大小以满足您的需求 在此处输入图片说明