我刚刚将Android Studio更新为3.5 Beta 1,并且获得
运行构建时的守护进程到期,因为JVM堆空间已耗尽
消息。此外,该构建需要花费更多时间才能完成。有人对此有任何想法吗?
答案 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
答案 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可用性。
答案 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
答案 5 :(得分:0)
就我而言,这可能是某种 gradle 错误。我们实际上没有记忆问题,但消息不断出现。我的解决方案是:
gradlew --no-daemon