UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: GC overhead limit exceeded

转载请标明出处 http://www.jianshu.com/p/3bef454874fc 本文出自:【wzhwcp的博客】

FAILURE: Build failed with an exception.

What went wrong: Execution failed for task ':app:preDexDebug'. com.android.ide.common.internal.LoggedErrorException: Failed to run command: /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

Error Code: 3 Output:

在用真机开发调试的过程中,好几台安卓机子都可以运行调试apk,但偏偏用到 Mei M1 metal这机子来调试的时候,却怎么装也装不上,在Gradle 构建的过程中,就发生了如上所示的错误。 后面在
https://stackoverflow.com/questions/25013638/android-studio-google-jar-file-causing-gc-overhead-limit-exceeded-error
这里找到了相应的解决方法:
在Android Studio 工程中的,app目录下的build.gradle文件添加

android{
     ......
    dexOptions {
         javaMaxHeapSize "4g"
    }
} 

就奇迹般的把问题解决了,那么为什么增加这个就有用了呢,经过搜索,又在https://stackoverflow.com/questions/33750404/android-gradle-what-is-javamaxheapsize-4g
这里找到了相应的回答

it is just an option to specify the maximum memory allocation pool for a Java Virtual Machine (JVM) for dex operation. And it's the same, as to provide to java the -xmx argument. Due to it's source codes from [here](https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/internal/dsl/DexOptionsImpl.groovy), it's setter look like:

这里翻译一下,大概的意思就是说:给虚拟机分配指定最大的内存来生成dex相关文件的操作,这个和java -xmx参数是一样的效果。

由于Android Studio 用的是Gradle 来构建项目,而Gradle又是运行在java 虚拟机上的,所以就有我们上面所说的问题,由于给Gradle 的jvm分配太少的内存,导致Gradle构建项目失败。从上面可以知道,通过设置 java -xmx 参数也是可以达到相同的效果,那么,在Android Studio上如何设置呢,在项目根目录下,找到gradle.properties文件,设置文件下的这个:org.gradle.jvmargs=-Xmx1536m即可修改给Gradle 分配指定最大的内存,这里分配最大1536兆字节的内存。

彩蛋:后面我发现我的项目会出现这个问题的根本原因是,在开发过程中,这个gradle.properties文件不知怎么的,居然不见了,不见了~~当发现的那一刻,我的内心是奔溃的……

参考:
https://docs.gradle.org/current/userguide/gradle_daemon.html
https://zhidao.baidu.com/question/1990600809932485307.html

你可能感兴趣的:(UNEXPECTED TOP-LEVEL ERROR: java.lang.OutOfMemoryError: GC overhead limit exceeded)