由于 JVM 堆 space 已耗尽,守护进程即将到期
Expiring Daemon because JVM heap space is exhausted
我刚刚将 Android Studio 更新到 3.5 Beta 1,我正在
Expiring Daemon because JVM heap space is exhausted
构建 运行 时的消息。此外,构建需要更多时间才能完成。有人对此有任何想法吗?
这可以通过增加为项目配置的最大堆大小来解决。
通过IDE:
将以下行添加到 gradle.properties 文件中。可以根据 RAM 可用性配置以下内存大小 (1)
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2560m
通过 GUI:
在设置中,搜索 'Memory Settings' 并增加 IDE 最大堆大小 和 守护程序最大堆大小 根据系统 RAM 可用性。
(1)
$ man java
...
-Xmxsize
Specifies the maximum size (in bytes) of the memory allocation pool in bytes. This value
must be a multiple of 1024 and greater than 2 MB. Append the letter k or K to indicate
kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. The default value
is chosen at runtime based on system configuration. For server deployments, -Xms and
-Xmx are often set to the same value. See the section "Ergonomics" in Java SE HotSpot
Virtual Machine Garbage Collection Tuning Guide at
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html.
The following examples show how to set the maximum allowed size of allocated memory to
80 MB using various units:
-Xmx83886080
-Xmx81920k
-Xmx80m
The -Xmx option is equivalent to -XX:MaxHeapSize.
...
我能够通过配置以下内容为我的 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"
}
}
The solution is to increase Android build memory.
随着您向应用程序添加更多模块,对 Android 构建系统的需求越来越大,默认内存设置将不起作用。为避免 OutOfMemoryErrors 在 Android 构建期间,您应该取消注释 /android/gradle.properties[=57 中存在的替代 gradle 内存设置=]:
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
您可以在 android 文件夹中找到 gradle.properties。
P.S.
What we are doing this and why it helps?
让我澄清一些基本术语以理解整个事情。
守护进程 : - 守护进程是一种计算机程序,运行作为后台进程,而不是在交互式用户的直接控制下。
Android Studio 2.1 启用了一项新功能:Dex In Process,可以显着提高完全清理的速度构建并提高 Instant 运行 性能。
要利用 Dex In Process,您需要修改 gradle.properties 文件并增加分配给 的内存量Gradle Daemon VM 1 Gb,最小 2 Gb,使用 org.gradle.jvmargs 属性:
指定用于守护进程的 JVM 参数。
该设置对于调整内存设置特别有用。
org.gradle.jvmargs=-Xmx2048m
默认值:
-Xmx10248m -XX:MaxPermSize=256m
默认 Gradle Daemon VM 内存分配为 1 GB — 这不足以支持 dexInProcess,因此要利用它,您需要将其设置为 at至少 2 GB。
Dex in process 的工作原理是允许多个 DEX 进程在单个 VM 中 运行,该 VM 也与 Gradle 共享,这就是为什么您需要在启用它之前分配额外的内存 —该内存将在 Gradle 和多个 DEX 进程之间共享。
如果您已将模块级 build.gradle 文件中的 javaMaxHeapSize 增加到超过默认的 1 GB,则需要相应地增加分配给 Gradle 守护进程的内存。
当有足够的内存分配时,进程中的 Dex 默认启用,提高整体构建性能并消除启动多个并行 VM 实例的开销。结果是所有构建时间都有显着改进,包括即时构建 运行、增量构建和完整构建。
来源:
https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e
就我而言,这可能是某种 gradle 错误。我们实际上没有内存问题,但消息不断出现。我的解决方案是:
gradlew --no-daemon
使用 gradle 选项平衡内存消耗和构建速度。示例
Android Studio 2022.1.1(PC RAM 16GB)
Gradle v7.3.3 (./gradle/wrapper/gradle-wrapper.properties)
AGP v7.2.0 (./build.gradle)
com.android.tools.build:gradle:7.2.0
缓存修复Gradle插件
org.gradle.android.cache-fix:org.gradle.android.cache-fix.gradle.plugin:2.5.3
此Google服务依赖版本支持Gradle配置缓存
com.google.gms:google-services:4.3.5
./gradle.properties
android.enableJetifier=true
android.jetifier.ignorelist=bcprov-jdk15on
android.useAndroidX=true
kapt.incremental.apt=true
kapt.use.worker.api=true
kotlin.daemon.jvm.options=-Xms1g -Xmx4g
manifestmerger.enabled=true
org.gradle.caching=true
org.gradle.configureondemand=true
org.gradle.daemon=true
org.gradle.jvmargs=-XX:InitialHeapSize=1g -XX:MaxHeapSize=6g -XX:MaxPermSize=2g -XX:MaxMetaspaceSize=2g -XX:NewSize=1g -XX:MaxNewSize=2g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.unsafe.configuration-cache=true
org.gradle.unsafe.configuration-cache-problems=warn
有用的链接:
https://proandroiddev.com/how-we-reduced-our-gradle-build-times-by-over-80-51f2b6d6b05b
https://developer.android.com/studio/build/profile-your-build#using-the-gradle---profile-option
我刚刚将 Android Studio 更新到 3.5 Beta 1,我正在
Expiring Daemon because JVM heap space is exhausted
构建 运行 时的消息。此外,构建需要更多时间才能完成。有人对此有任何想法吗?
这可以通过增加为项目配置的最大堆大小来解决。
通过IDE:
将以下行添加到 gradle.properties 文件中。可以根据 RAM 可用性配置以下内存大小 (1)
org.gradle.daemon=true
org.gradle.jvmargs=-Xmx2560m
通过 GUI:
在设置中,搜索 'Memory Settings' 并增加 IDE 最大堆大小 和 守护程序最大堆大小 根据系统 RAM 可用性。
(1)
$ man java
...
-Xmxsize
Specifies the maximum size (in bytes) of the memory allocation pool in bytes. This value
must be a multiple of 1024 and greater than 2 MB. Append the letter k or K to indicate
kilobytes, m or M to indicate megabytes, g or G to indicate gigabytes. The default value
is chosen at runtime based on system configuration. For server deployments, -Xms and
-Xmx are often set to the same value. See the section "Ergonomics" in Java SE HotSpot
Virtual Machine Garbage Collection Tuning Guide at
http://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/index.html.
The following examples show how to set the maximum allowed size of allocated memory to
80 MB using various units:
-Xmx83886080
-Xmx81920k
-Xmx80m
The -Xmx option is equivalent to -XX:MaxHeapSize.
...
我能够通过配置以下内容为我的 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"
}
}
The solution is to increase Android build memory.
随着您向应用程序添加更多模块,对 Android 构建系统的需求越来越大,默认内存设置将不起作用。为避免 OutOfMemoryErrors 在 Android 构建期间,您应该取消注释 /android/gradle.properties[=57 中存在的替代 gradle 内存设置=]:
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
您可以在 android 文件夹中找到 gradle.properties。
P.S.
What we are doing this and why it helps?
让我澄清一些基本术语以理解整个事情。
守护进程 : - 守护进程是一种计算机程序,运行作为后台进程,而不是在交互式用户的直接控制下。
Android Studio 2.1 启用了一项新功能:Dex In Process,可以显着提高完全清理的速度构建并提高 Instant 运行 性能。
要利用 Dex In Process,您需要修改 gradle.properties 文件并增加分配给 的内存量Gradle Daemon VM 1 Gb,最小 2 Gb,使用 org.gradle.jvmargs 属性:
指定用于守护进程的 JVM 参数。 该设置对于调整内存设置特别有用。
org.gradle.jvmargs=-Xmx2048m
默认值:
-Xmx10248m -XX:MaxPermSize=256m
默认 Gradle Daemon VM 内存分配为 1 GB — 这不足以支持 dexInProcess,因此要利用它,您需要将其设置为 at至少 2 GB。
Dex in process 的工作原理是允许多个 DEX 进程在单个 VM 中 运行,该 VM 也与 Gradle 共享,这就是为什么您需要在启用它之前分配额外的内存 —该内存将在 Gradle 和多个 DEX 进程之间共享。
如果您已将模块级 build.gradle 文件中的 javaMaxHeapSize 增加到超过默认的 1 GB,则需要相应地增加分配给 Gradle 守护进程的内存。
当有足够的内存分配时,进程中的 Dex 默认启用,提高整体构建性能并消除启动多个并行 VM 实例的开销。结果是所有构建时间都有显着改进,包括即时构建 运行、增量构建和完整构建。
来源: https://medium.com/google-developers/faster-android-studio-builds-with-dex-in-process-5988ed8aa37e
就我而言,这可能是某种 gradle 错误。我们实际上没有内存问题,但消息不断出现。我的解决方案是:
gradlew --no-daemon
使用 gradle 选项平衡内存消耗和构建速度。示例
Android Studio 2022.1.1(PC RAM 16GB)
Gradle v7.3.3 (./gradle/wrapper/gradle-wrapper.properties)
AGP v7.2.0 (./build.gradle)
com.android.tools.build:gradle:7.2.0
缓存修复Gradle插件
org.gradle.android.cache-fix:org.gradle.android.cache-fix.gradle.plugin:2.5.3
此Google服务依赖版本支持Gradle配置缓存
com.google.gms:google-services:4.3.5
./gradle.properties
android.enableJetifier=true
android.jetifier.ignorelist=bcprov-jdk15on
android.useAndroidX=true
kapt.incremental.apt=true
kapt.use.worker.api=true
kotlin.daemon.jvm.options=-Xms1g -Xmx4g
manifestmerger.enabled=true
org.gradle.caching=true
org.gradle.configureondemand=true
org.gradle.daemon=true
org.gradle.jvmargs=-XX:InitialHeapSize=1g -XX:MaxHeapSize=6g -XX:MaxPermSize=2g -XX:MaxMetaspaceSize=2g -XX:NewSize=1g -XX:MaxNewSize=2g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.unsafe.configuration-cache=true
org.gradle.unsafe.configuration-cache-problems=warn
有用的链接:
https://proandroiddev.com/how-we-reduced-our-gradle-build-times-by-over-80-51f2b6d6b05b
https://developer.android.com/studio/build/profile-your-build#using-the-gradle---profile-option