Daemon in scadenza perché lo spazio heap JVM è esaurito


94

Ho appena aggiornato Android Studio a 3.5 Beta 1 e sto ricevendo

Daemon in scadenza perché lo spazio heap JVM è esaurito

messaggio mentre la build è in esecuzione. Inoltre, il completamento della build richiede più tempo. Qualcuno ha idea di questo?



1
@JurajMartinka sì, hai ragione. è stato corretto dopo aver aumentato la dimensione massima dell'heap dell'IDE . Quindi introducono una nuova opzione chiamata Impostazioni memoria nell'ultimo Android Studio 3.5. Tutto questo viene fatto per correggere la perdita di memoria in Android Studio.
Rishabh Sagar

Risposte:


106

Sono stato in grado di risolvere questo problema per il mio progetto React Native configurando quanto segue:

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

e

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

1
@ MattBooth grazie per avermi aiutato
Disattiva Chanchad

2
quando ho aggiunto questo codice, le icone vettoriali di react-native non funzionavano correttamente.
Amir Gorji

Grazie mille. Un voto positivo non può esprimere la mia gratitudine.
pokumars

89

Questo può essere risolto aumentando la dimensione heap massima configurata per il progetto.

Tramite IDE:

Aggiungi le seguenti righe nel file gradle.properties. La dimensione della memoria inferiore può essere configurata in base alla disponibilità della RAM

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

Tramite GUI:

Nelle Impostazioni, cerca "Impostazioni memoria" e aumenta la dimensione massima dell'heap IDE e la dimensione massima dell'heap del Daemon in base alla disponibilità della RAM di sistema.

Impostazioni di memoria in Android Studio


Il valore predefinito di FWIW org.gradle.daemon è true, quindi quella riga non è necessaria.
Smalls

25

La soluzione è aumentare la memoria di build di Android.

Man mano che aggiungi più moduli alla tua app, c'è un'incredibile richiesta sul sistema di build Android e le impostazioni di memoria predefinite non funzioneranno. Per evitare OutOfMemoryErrors durante le build di Android, devi rimuovere il commento dall'impostazione della memoria gradle alternativa presente in /android/gradle.properties :

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

Puoi trovare gradle.properties nella cartella Android .

PS

Cosa stiamo facendo e perché aiuta?

Vorrei chiarire alcuni termini di base per comprendere l'intera faccenda.

Daemon : - Un daemon è un programma per computer che viene eseguito come processo in background, anziché essere sotto il controllo diretto di un utente interattivo.

Android Studio 2.1 abilita una nuova funzionalità: Dex In Process , che può aumentare notevolmente la velocità di build completamente pulite e migliorare le prestazioni di Instant Run.

Per sfruttare Dex In Process , è necessario modificare il file gradle.properties e aumentare la quantità di memoria allocata alla VM Gradle Daemon di 1 Gb, fino a un minimo di 2 Gb, utilizzando la proprietà org.gradle.jvmargs :

Specifica gli argomenti JVM utilizzati per il processo daemon. L'impostazione è particolarmente utile per modificare le impostazioni di memoria.

org.gradle.jvmargs=-Xmx2048m

Valore predefinito:

-Xmx10248m -XX:MaxPermSize=256m

L' allocazione di memoria predefinita della VM Gradle Daemon è 1 gigabyte, che è insufficiente per supportare dexInProcess, quindi per trarne vantaggio dovrai impostarlo su almeno 2 gigabyte.

Dex in process funziona consentendo l'esecuzione di più processi DEX all'interno di una singola VM condivisa anche con Gradle, motivo per cui è necessario allocare la memoria extra prima che possa essere abilitata: quella memoria verrà condivisa tra Gradle e più processi DEX.

Se hai aumentato javaMaxHeapSize nel tuo file build.gradle a livello di modulo oltre il valore predefinito di 1 gigabyte, dovrai aumentare corrispondentemente la memoria assegnata al Daemon Gradle.

Quando la memoria assegnata è sufficiente, Dex in Process è abilitato per impostazione predefinita, migliorando le prestazioni complessive della build e rimuovendo il sovraccarico dell'avvio di più istanze VM parallele . Il risultato è un miglioramento significativo in tutti i tempi di compilazione, comprese le build Instant Run, incrementali e complete.

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

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


1
Potresti spiegare cosa sta facendo e perché aiuta?
Alex


1
Ciao @KailashUniyal e se avessi la dimensione dell'heap a 2048 nella gui di Android Studio e ricevo ancora "Daemon in scadenza perché lo spazio dell'heap di JVM è esaurito"?
abdi

1
@abdi Prova a metterlo org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8in gradle.properties. Se ancora non funziona, mi dispiace, non ho idea di come risolverlo.
Kailash Uniyal

1
un-commenting org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8in android/gradle.propertiesfunzionato lika un fascino. Grazie!! @KailashUniyal
bansal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.