守护进程到期,因为JVM堆空间已耗尽

时间:2019-05-10 10:12:10

标签: android-studio gradle jvm android-studio-3.5

我刚刚将Android Studio更新为3.5 Beta 1,并且获得

  

守护进程到期,因为JVM堆空间已耗尽

运行构建时的

消息。此外,该构建需要花费更多时间才能完成。有人对此有任何想法吗?

6 个答案:

答案 0 :(得分:24)

解决方案是增加Android构建内存。

当您向应用程序中添加更多模块时,Android构建系统上的需求令人难以置信,并且默认内存设置将不起作用。为了避免在Android构建过程中出现 OutOfMemoryErrors ,您应该取消注释 /android/gradle.properties 中存在的备用Gradle内存设置:

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

您可以在 android 文件夹中找到gradle.properties。

P.S。

我们正在做什么以及为什么有帮助?

让我清除一些基本的术语,以了解整个过程。

守护程序:-守护程序是一种计算机程序,它作为后台进程运行,而不是受交互式用户的直接控制。

Android Studio 2.1 启用了一项新功能: Dex In Process ,该功能可以显着提高完全清理构建的速度并提高Instant Run性能。

要利用 Dex In Process 的优势,您需要修改gradle.properties文件,并将分配给 Gradle Daemon VM 的内存量增加1 Gb,使用org.gradle.jvmargs属性至少为2 Gb:

指定用于守护进程的JVM参数。 该设置对于调整内存设置特别有用。

org.gradle.jvmargs=-Xmx2048m

默认值:

-Xmx10248m -XX:MaxPermSize=256m

默认的 Gradle Daemon VM 内存分配为1 GB,这不足以支持dexInProcess,因此要利用这一点,您需要将其设置为至少2 GB。

Dex进程通过允许多个DEX进程在与Gradle共享的单个VM中运行来工作,这就是为什么您需要先分配额外的内存才能启用它-内存将在Gradle和多个DEX之间共享程序。

如果您将模块级build.gradle文件中的javaMaxHeapSize增加到默认值1 GB以上,则需要相应地增加分配给Gradle守护程序的内存。

默认情况下,当启用足够的内存分配时,“处理中的Dex”会提高整体构建性能并消除启动多个并行VM实例的开销。结果是所有构建时间都得到了显着改善,包括即时运行,增量构建和完整构建。

来源: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e

https://rnfirebase.io/#increasing-android-build-memory

答案 1 :(得分:22)

我能够通过配置以下内容来解决我的 React Native 项目:

// gradle.properties
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

// app/build.gradle
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}

答案 2 :(得分:6)

可以通过增加为项目配置的最大堆大小来解决此问题。

通过IDE:

将以下几行添加到gradle.properties文件中。低于以下内存大小可以根据RAM可用性进行配置

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2560m

通过GUI:

在“设置”中,搜索“内存设置” ,并根据系统增加 IDE最大堆大小 Daemon最大堆大小 RAM可用性。

Memory Settings in Android Studio

答案 3 :(得分:5)

当您向应用添加更多模块时,对 Android 构建系统的需求令人难以置信,默认内存设置将不起作用。为避免 Android 构建期间出现 OutOfMemoryErrors,您应该取消注释 /android/gradle.properties 中的备用 gradle 内存设置:

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

答案 4 :(得分:0)

只需取消对所选行的注释即可。

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

img

答案 5 :(得分:0)

就我而言,这可能是某种 gradle 错误。我们实际上没有记忆问题,但消息不断出现。我的解决方案是:

gradlew --no-daemon