Daemon läuft ab, weil der JVM-Heap-Speicherplatz erschöpft ist

91

Ich habe gerade das Android Studio auf 3.5 Beta 1 aktualisiert und bekomme es

Daemon läuft ab, weil der JVM-Heap-Speicherplatz erschöpft ist

Nachricht, während der Build ausgeführt wird. Außerdem dauert der Build länger. Hat jemand eine Idee dazu?

Rishabh Sagar
quelle
2
Sehen Sie hier, ob das hilft: stackoverflow.com/questions/47207126/…
Juraj Martinka
1
@ JurajMartinka ja, du hast recht. Es wurde behoben, nachdem die maximale IDE-Heap-Größe erhöht wurde . Daher führen sie im neuesten Android Studio 3.5 eine neue Option namens Speichereinstellungen ein . Dies alles geschieht, um Speicherverluste in Android Studio zu beheben.
Rishabh Sagar

Antworten:

97

Ich konnte dies für mein React Native- Projekt lösen, indem ich Folgendes konfigurierte:

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

und

// app/build.gradle
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}
Jordan Grant
quelle
1
@ MattBooth Danke für die Hilfe
Dishant Chanchad
2
Als ich diesen Code hinzufügte, funktionierten React-Native-Vector-Icons nicht richtig.
Amir Gorji
86

Dies kann behoben werden, indem die konfigurierte maximale Heap-Größe für das Projekt erhöht wird .

Durch IDE:

Fügen Sie die folgenden Zeilen in die Datei gradle.properties ein. Die unten angegebene Speichergröße kann basierend auf der RAM-Verfügbarkeit konfiguriert werden

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

Über die GUI:

Suchen Sie in den Einstellungen nach "Speichereinstellungen" und erhöhen Sie die IDE max Heap - Größe und Daemon max Heap - Größe gemäß dem System - RAM Verfügbarkeit.

Speichereinstellungen in Android Studio

Rishabh Sagar
quelle
FWIW org.gradle.daemon ist standardmäßig true, sodass diese Zeile nicht benötigt wird.
Smalls
22

Die Lösung besteht darin, den Build-Speicher für Android zu erhöhen.

Wenn Sie Ihrer App weitere Module hinzufügen, wird eine unglaubliche Anforderung an das Android-Build-System gestellt, und die Standardspeichereinstellungen funktionieren nicht. Um OutOfMemoryErrors während Android-Builds zu vermeiden , sollten Sie die alternative Gradle-Speichereinstellung in /android/gradle.properties auskommentieren :

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

Sie finden gradle.properties im Android- Ordner.

PS

Was machen wir das und warum hilft es?

Lassen Sie mich einige grundlegende Begriffe zum Verständnis des Ganzen klarstellen.

Daemon : - Ein Daemon ist ein Computerprogramm, das als Hintergrundprozess ausgeführt wird und nicht direkt von einem interaktiven Benutzer gesteuert wird.

Android Studio 2.1 ermöglicht eine neue Funktion: Dex In Process , mit der die Geschwindigkeit vollständiger sauberer Builds drastisch erhöht und die Leistung von Instant Run verbessert werden kann.

Um Dex In Process nutzen zu können , müssen Sie Ihre Datei gradle.properties ändern und den der Gradle Daemon-VM zugewiesenen Speicherplatz mithilfe der Eigenschaft org.gradle.jvmargs um 1 GB auf mindestens 2 GB erhöhen ::

Gibt die JVM-Argumente an, die für den Daemon-Prozess verwendet werden. Die Einstellung ist besonders nützlich, um die Speichereinstellungen zu optimieren.

org.gradle.jvmargs=-Xmx2048m

Standardwert:

-Xmx10248m -XX:MaxPermSize=256m

Die Standardspeicherzuweisung für Gradle Daemon VM beträgt 1 Gigabyte. Dies reicht nicht aus, um dexInProcess zu unterstützen. Um die Vorteile nutzen zu können, müssen Sie mindestens 2 Gigabyte festlegen.

Dex in process ermöglicht die Ausführung mehrerer DEX-Prozesse in einer einzigen VM, die auch für Gradle freigegeben ist. Aus diesem Grund müssen Sie den zusätzlichen Speicher zuweisen, bevor er aktiviert werden kann. Dieser Speicher wird von Gradle und mehreren DEX-Prozessen gemeinsam genutzt.

Wenn Sie die javaMaxHeapSize in Ihrer build.gradle-Datei auf Modulebene über den Standardwert von 1 Gigabyte hinaus erhöht haben, müssen Sie den dem Gradle Daemon zugewiesenen Speicher entsprechend erhöhen.

Wenn genügend Speicher zugewiesen ist, ist Dex in Process standardmäßig aktiviert, wodurch die allgemeine Build-Leistung verbessert und der Aufwand für das Starten mehrerer paralleler VM-Instanzen verringert wird . Das Ergebnis ist eine signifikante Verbesserung aller Build-Zeiten, einschließlich Instant Run, inkrementeller und vollständiger Builds.

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

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

Kailash Uniyal
quelle
1
Können Sie erklären, was dies tut und warum es hilft?
Alex
1
Geben Sie auch die Quellen an. medium.com/google-developers/…
Rishabh Sagar
1
Hallo @KailashUniyal, was ist, wenn ich die Heap-Größe bei 2048 in der Benutzeroberfläche von Android Studio habe und immer noch "Expiring Daemon, weil der JVM-Heap-Speicherplatz erschöpft ist" erhalte?
abdi
@abdi Versuchen Sie dies org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8in gradle.properties zu setzen. Wenn es immer noch nicht funktioniert, habe ich leider keine Ahnung, wie ich das beheben kann.
Kailash Uniyal
1
Nicht kommentieren org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8in android/gradle.propertiesgearbeitet wie ein Zauber. Vielen Dank!! @ KailashUniyal
Vikas Bansal