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


210

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

失败:生成失败,发生异常。

  • 出了什么问题:任务':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)

我正在使用此库:

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

但是,我仍然会收到错误消息。这可能是什么原因造成的?除了silentSMS应用程序是一个Eclipse项目,并且将代码移植到Android Studio之外,我没有做任何更改。关于Android Studio发现错误-不会,其他一切看起来都很好。

Answers:


547

我认为有另一种方法可以提高Dexing操作的堆限制。将此添加到文件的android闭包中build.gradle

dexOptions {
    javaMaxHeapSize "4g"
}

看看是否有帮助。

(理想情况是由Scott Barta给出的答案


45
4g是有点矫kill过正,2g可以吗
Hugo Gresse

3
太棒了!这也解决了我的错误。我发现我给它的内存越多,构建就越快。我从1分多钟转到了19秒。
西蒙(Simon)

2
我仍然收到错误消息: java.lang.OutOfMemoryError:java.util.BitSet.clone中超出了GC开销限制[org.gradle.api.internal.project.ant.AntLoggingAdapter]
IgorGanapolsky

7
我已添加此内容,但我仍然看到OutOfMemoryError
乍得·宾厄姆

8
不适用于我,需要使用gradle.properties:– org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac

93

就我而言,要增加堆大小如下所示:

使用Android Studio 1.1.0

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "2048M"
    }
}

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


4
GC overhead limit exceeded在启用Multidexing之后,这一工作得以克服。例外是at com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
某处某人

这不是一个很好的评论,但是Android Studio错误显示`UNEXPECTED TOP-LEVEL ERROR:java.lang.OutOfMemoryError:超出了GC开销限制`异常的位置在at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)com.android.dx.command.dexer.Main.runMultiDex(Main.java:334) at com.android.dx.command.dexer.Main.run(Main.java:244) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106)
某处

1
但是,一旦我添加了您建议的javaMaxHeapSize和增量参数,Android Studio就可以构建多色应用程序。
某处某人2015年

如果2gb还不够,那么我将尝试使用通用软件建议的4gb。
某处某人2015年

1
谢谢。请注意文档中所说的内容incremental这有很多局限性,可能无法正常工作。小心使用。
Ferran Maylinch 2015年

41

此新问题是由最新版本的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

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

dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
}

1
警告:该android.dexOptions.incremental属性已弃用,并且对构建过程没有影响。
tir38 '16

这解决了我的问题。但是我会创建一个名为java_pid1512.hprof的文件,该文件非常大。我猜您的Dfile选项正在创建它?是否有必要,您能显示如何将转储文件删除吗
j2emanue

1
@ j2emanue:创建此文件是因为“ HeapDumpOnOutOfMemoryError”选项:docs.oracle.com/cd/E15289_01/doc.40/e15062/…–
Mehlyfication

1
可能需要更新:incremental在2018年底删除
cuasodayleo

在AS 3.4中,启用gradle.properties文件中的“ org.gradle.jvmargs = -Xmx2048m -XX:MaxPermSize = 512m -XX:+ HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8”对我来说解决了这个问题
JimmyFlash

4

我通过以下方式禁用“即时运行”:

菜单首选项构建即时运行“启用即时运行到热插拔代码”

我猜这是即时运行使构建速度变慢,并创建了一个大的pidXXX.hprof文件,这导致超出了AndroidStudio gc开销限制。

(我的设备SDK为19。)


您是如何发现Instant Run创建了如此大的hprof文件的?我注意到最近在我们的GitLab服务器上创建了一个,但是我们没有启用即时运行。
AdamMc331 '19

4

Android Studio 3.5.3

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


1
谢谢你救了我的一天。
Virendra Pal Singh,


0

我从taskmanger强制关闭了所有Java.exe,重新启动了Android Studio,它对我有用

在此处输入图片说明


0

对我来说,没有答案有效,我在这里看到了。我猜想CPU的工作非常辛苦,这会使计算机变热。关闭消耗大量CPU(例如chrome)的程序并冷却笔记本电脑后,问题消失了。

供参考:我的java.exe进程(实际上是gradle相关进程)的CPU利用率为96%-97%,内存使用量超过2,000,000K。


您的解决方案与此处提出的特定问题有何关系?
kalabalik

我收到上面指定的相同错误:java.lang.OutOfMemoryError:超出了GC开销限制我提供的解决方案为我解决了该错误
olNoy

0

我正在使用Android Studio 3.4对我唯一有效的方法是从build.gradle文件中删除以下行:

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

因为Android Studio 3.4正在使用R8full mode,与之不直接兼容Proguard


2
我认为当您必须发布混淆的版本时,这不是解决方案。我在Android Studio 3.4中使用了gradle-5.2.1,即使gradle-5.1.1遇到类似问题,即使使用pro-guard配置,它也可以正常工作。minifyEnabled true
Vikas Patidar '19

这与我们想要的完全相反。-1
Zun

就像我说的那样,这对我有用,错误消失了,最后我能够生成apk。在我的项目中,没有其他答案有效。
pableiros

将gradle更新为5.2.1/ project / android中 运行cammand ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal,

0

就我而言,我编辑我的 gradle.properties

注意:如果您启用 minifyEnabled true

删除此行:

android.enableR8=true

并将此行添加到ur build.gradleandroidblock:

  dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
    }

希望这对某人有所帮助:)


0

4g有点矫kill过正,如果您不想更改buildGradle,则可以使用FILE-> Invalid caches / restart。

那对我来说很好...


0

在某个时候,副本的副本已apply plugin: 'com.android.application'添加到我的构建gradle中。删除重复的副本并确保我所有的应用插件都位于顶部,为我解决了该问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.