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


91

我刚刚将Android Studio更新为3.5 Beta 1,

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

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



1
@JurajMartinka是的,你是对的。在增加IDE的最大堆大小后,此问题已得到解决。因此,他们在最新的Android Studio 3.5中引入了一个称为“内存设置”的新选项。这样做是为了修复Android Studio中的内存泄漏。
里沙卜·萨加尔

Answers:


97

通过配置以下内容,我能够为我的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"
    }
}

1
@MattBooth thanx帮助我
Dishant Chanchad

2
当我添加此代码时,react-native-vector-icons无法正常工作。
阿米尔·戈尔吉

86

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

通过IDE:

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

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

通过GUI:

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

Android Studio中的内存设置


FWIW org.gradle.daemon默认为true,因此不需要该行。

22

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

当您向应用程序添加更多模块时,Android构建系统上的需求令人难以置信,并且默认内存设置将不起作用。为了避免OutOfMemoryError异常期间的Android建立,则应该取消注释的gradle交替内存设置存在于/android/gradle.properties

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

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

聚苯乙烯

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

让我清除一些基本术语,以了解整个内容。

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

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

要利用Dex In Process的优势,您需要使用org.gradle.jvmargs属性修改gradle.properties文件,并将分配给Gradle Daemon VM的内存量增加1 Gb,最少增加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
您能解释一下它在做什么以及为什么有帮助吗?
亚历克斯


1
您好@KailashUniyal,如果我在android studio的gui中的堆大小为2048,而我仍然收到“由于JVM堆空间已用尽,守护进程将过期”怎么办?
abdi

@abdi尝试将其org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8放在gradle.properties中。如果仍然无法正常工作,那么抱歉,我不知道该如何解决。
Kailash Uniyal

1
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8android/gradle.properties工作的lika中不加评论的魅力。谢谢!!@KailashUniyal
vikas bansal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.