Android 1.4上的java.lang.OutOfMemoryError: GC overhead limit exceeded

38

当我在Android 1.4上运行Gradle时,出现了java.lang.OutOfMemoryError: GC overhead limit exceeded错误... 这是我的依赖项:

dependencies {
    compile project(':android-crop')
    compile project(':RTEditor-Toolbar')

        compile files('libs/apache-mime4j-0.6.jar')
        compile files('libs/httpmime-4.1.3.jar')
    /*    compile files('libs/httpcore-4.4.1.jar')*/
    compile files('libs/jetbrains-annotations.jar')
    compile files('libs/pinchzoom.jar')
    compile files('libs/gcm.jar')
    compile 'com.google.android.gms:play-services:7.8.0'
    compile 'com.android.support:multidex:1.0.0'
    compile 'com.android.support:appcompat-v7:22.2.1'
    compile 'com.android.support:cardview-v7:22.2.1'
    compile 'com.android.support:design:22.2.1'
    compile 'com.android.support:recyclerview-v7:22.2.1'
    compile 'com.android.support:support-v4:22.2.1'
    //three party library
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.mcxiaoke.volley:library:1.0.18'
    compile 'com.vinaysshenoy:mugen:1.0.1'
    compile 'com.github.clans:fab:1.5.5'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.github.curioustechizen.android-ago:library:1.3.0'
    compile 'com.squareup.okio:okio:1.5.0'
    compile 'com.squareup.okhttp:okhttp:2.4.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
    compile('com.crashlytics.sdk.android:crashlytics:2.5.1@aar') {
        transitive = true;
    }

如何解决这个问题?


1
在你的 build.gradle 文件中添加 dexOptions { // 防止在构建阶段使用 MultiDex 时发生 OutOfMemory javaMaxHeapSize "4g" } - M D
7个回答

80

把这段代码添加到你的安卓闭包 (build gradle) 中:

 dexOptions {
        javaMaxHeapSize "4g"
 }

这将解决您的问题。但如果您仍然遇到问题,请查看以下链接:

GC overhead limit exceeded error


2
“incremental true”现在已经被弃用,对构建过程没有影响。因此可以忽略。 - Narendra Singh
1
没有帮助,我将其设置为12G内存,仍然出现错误。 - Ábrahám Endre
@ÁbrahámEndre,你可以试试这个:https://dev59.com/nloV5IYBdhLWcg3wIb74 - King of Masses
已经尝试过了,我使用 -Xmx4096 启动了 IDE,甚至关闭了 GCOverhead,gradle.properties 也做了同样的操作,但仍然会出现问题。如果我移除 Facebook SDK,问题就不存在了。 - Ábrahám Endre
13
为了澄清,将其添加到app/build.gradle文件中的android { }对象内。 - pmont

51

这是我的建议:

将以下内容添加到您的"gradle.properties"文件中:

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError

此外,请阅读这篇文章。你可以通过添加其中的组合来使构建速度更快:

org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true

那些不是正在孵化的功能吗? - IgorGanapolsky
2
最新版本的Gradle默认启用了守护进程。 - Marko

9
在我的情况下,OutOfMemoryError来自这个错误。启动Gradle守护进程,1个繁忙和6个停止的守护进程无法重用,请使用--status查看详情 为了解决这个问题,我使用./gradlew --stop./gradle --stop
如果仍然没有解决,这意味着gradle进程被锁定(这种情况发生在OutOfMemoryError之后)。
前往/users/[用户名]/.gradle/daemon(隐藏)文件夹。
你会看到每个构建的gradle版本文件夹,如3.2 3.3 4.0.1 4.1 4.10.1 4.10.2 4.4 4.6 5.4.1 5.5 进入这些文件夹并删除名为的文件。

registry.bin

registry.bin.lock

对于我来说,我删除了所有这些文件夹。

然后重新构建你的应用程序。现在应该可以工作了。


这就是它。这就是答案。像魔法一样运作。 - WhiplashOne

6
这对我很有帮助!只需将以下行添加到“gradle.properties”文件中即可。
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.configureondemand=true

这个答案是三年前由@android-developer给出的,而且更详细 - 请不要抄袭他人的答案。 - donturner

3
当JVM/Dalvik花费98%以上的时间做GC,而只有2%或更少的堆大小被回收时,“java.lang.OutOfMemoryError: GC overhead limit exceeded”就会被抛出。
解决方法是扩展堆空间或使用分析工具/内存转储分析器,并尝试找到问题的原因。

1
什么是“扩展堆空间”? - IgorGanapolsky

2
我的测试在gradle版本5.2.1中失败了,显示"GC overhead limit exceeded java.lang.OutOfMemoryError: GC overhead limit exceeded"。我通过在build.gradle中添加maxHeapSize来解决问题,如下所示: maxHeapSize
 test {
        maxHeapSize = "4g"
    }

我在运行使用Apache POI加载Excel文件的测试时遇到了问题。在我的build.gradle文件的test部分中将maxHeapSize设置为1g解决了这个问题。 - chutch1122

-1

只需进入偏好设置或设置 -> 存储设置 -> 并设置您的分配内存

Android Studio 3.5


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接