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.