Expiration du démon car l'espace du tas JVM est épuisé

91

Je viens de mettre à jour Android Studio vers la version 3.5 Beta 1 et je reçois

Expiration du démon car l'espace du tas JVM est épuisé

message pendant l'exécution de la compilation. En outre, la construction prend plus de temps à se terminer. Quelqu'un a-t-il une idée à ce sujet?

Rishabh Sagar
la source
2
Voyez ici si cela aide: stackoverflow.com/questions/47207126/…
Juraj Martinka
1
@JurajMartinka oui, vous avez raison. il a été corrigé après avoir augmenté la taille maximale du tas IDE . Ils introduisent donc une nouvelle option appelée Paramètres de mémoire dans le dernier Android Studio 3.5. Tout cela est fait pour corriger les fuites de mémoire dans Android Studio.
Rishabh Sagar

Réponses:

97

J'ai pu résoudre ce problème pour mon projet React Native en configurant ce qui suit:

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

et

// app/build.gradle
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}
Jordan Grant
la source
1
@MattBooth merci de m'aider
Dishant Chanchad
2
quand j'ai ajouté ce code, react-native-vector-icons ne fonctionnait pas correctement.
Amir Gorji
86

Cela peut être résolu en augmentant la taille maximale du tas configurée pour le projet.

Via IDE:

Ajoutez les lignes ci-dessous dans le fichier gradle.properties. La taille de mémoire inférieure peut être configurée en fonction de la disponibilité de la RAM

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

Par GUI:

Dans les paramètres, recherchez «Paramètres de mémoire» et augmentez la taille maximale du tas IDE et la taille maximale du tas Daemon selon la disponibilité de la RAM du système.

Paramètres de mémoire dans Android Studio

Rishabh Sagar
la source
La valeur par défaut de FWIW org.gradle.daemon est true pour que cette ligne ne soit pas nécessaire.
Petit
22

La solution consiste à augmenter la mémoire de build Android.

Au fur et à mesure que vous ajoutez plus de modules à votre application, il y a une demande incroyable placée sur le système de construction Android et les paramètres de mémoire par défaut ne fonctionneront pas. Pour éviter OutOfMemoryErrors pendant les versions Android, vous devez décommenter le paramètre de mémoire de gradle alternatif présent dans /android/gradle.properties :

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

Vous pouvez trouver gradle.properties dans le dossier android .

PS

Que faisons-nous et pourquoi cela aide-t-il?

Permettez-moi de clarifier une terminologie de base pour comprendre tout cela.

Démon : - Un démon est un programme informatique qui s'exécute en tant que processus d'arrière-plan, plutôt que d'être sous le contrôle direct d'un utilisateur interactif.

Android Studio 2.1 permet une nouvelle fonctionnalité: Dex In Process , qui peut considérablement augmenter la vitesse des builds entièrement nettoyés et améliorer les performances d'Instant Run.

Pour profiter de Dex In Process , vous devrez modifier votre fichier gradle.properties et augmenter la quantité de mémoire allouée à la machine virtuelle Gradle Daemon de 1 Go, à un minimum de 2 Go, à l'aide de la propriété org.gradle.jvmargs :

Spécifie les arguments JVM utilisés pour le processus démon. Le paramètre est particulièrement utile pour modifier les paramètres de mémoire.

org.gradle.jvmargs=-Xmx2048m

Valeur par défaut:

-Xmx10248m -XX:MaxPermSize=256m

L' allocation de mémoire par défaut de Gradle Daemon VM est de 1 gigaoctet, ce qui est insuffisant pour prendre en charge dexInProcess.Pour en profiter, vous devrez donc le définir sur au moins 2 gigaoctets.

Dex in process fonctionne en permettant à plusieurs processus DEX de s'exécuter dans une seule machine virtuelle également partagée avec Gradle, c'est pourquoi vous devez allouer la mémoire supplémentaire avant de pouvoir l'activer - cette mémoire sera partagée entre Gradle et plusieurs processus DEX.

Si vous avez augmenté le javaMaxHeapSize dans votre fichier build.gradle au niveau du module au-delà de la valeur par défaut de 1 gigaoctet, vous devrez augmenter la mémoire affectée au démon Gradle en conséquence.

Lorsqu'il y a suffisamment de mémoire attribuée, Dex in Process est activé par défaut, ce qui améliore les performances de construction globales et supprime la surcharge de démarrage de plusieurs instances de VM parallèles . Le résultat est une amélioration significative de tous les temps de construction, y compris l'exécution instantanée, les versions incrémentielles et complètes.

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

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

Kailash Uniyal
la source
1
Pouvez-vous expliquer ce que cela fait et pourquoi cela aide?
Alex
1
Mettez aussi les sources. medium.com/google-developers/…
Rishabh Sagar
1
Bonjour @KailashUniyal, et si j'ai la taille du tas à 2048 dans l'interface graphique d'Android Studio et que je reçois toujours `` Démon expirant parce que l'espace de tas JVM est épuisé ''?
abdi
@abdi Essayez de mettre ceci org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8dans gradle.properties. Si cela ne fonctionne toujours pas, désolé, je ne sais pas comment résoudre ce problème.
Kailash Uniyal le
1
un-commenting org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8en android/gradle.propertiestravaillé comme un charme. Merci!! @KailashUniyal
vikas bansal