Daemon caducado porque el espacio de almacenamiento dinámico de JVM está agotado

91

Acabo de actualizar Android Studio a 3.5 Beta 1 y obtengo

Daemon caducado porque el espacio de almacenamiento dinámico de JVM está agotado

mensaje mientras se ejecuta la compilación. Además, la compilación está tardando más en completarse. ¿Alguien tiene alguna idea al respecto?

Rishabh Sagar
fuente
2
Vea aquí si eso ayuda: stackoverflow.com/questions/47207126/…
Juraj Martinka
1
@JurajMartinka sí, tienes razón. se solucionó después de aumentar el tamaño máximo del montón de IDE . Así que introducen una nueva opción llamada Configuración de memoria en el último Android Studio 3.5. Todo esto se hace para reparar la pérdida de memoria en Android Studio.
Rishabh Sagar

Respuestas:

97

Pude resolver esto para mi proyecto React Native configurando lo siguiente:

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

y

// app/build.gradle
android {
    dexOptions {
       javaMaxHeapSize "3g"
    }
}
Jordan Grant
fuente
1
@MattBooth gracias por ayudarme
Dishant Chanchad
2
cuando agregué este código, react-native-vector-icons no funcionaba correctamente.
Amir Gorji
86

Esto se puede solucionar aumentando el tamaño de pila máximo configurado para el proyecto.

A través de IDE:

Agregue las siguientes líneas en el archivo gradle.properties. El tamaño de la memoria inferior se puede configurar según la disponibilidad de RAM

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

A través de GUI:

En la Configuración, busque 'Configuración de memoria' y aumente el tamaño máximo de pila IDE y el tamaño máximo de pila de Daemon según la disponibilidad de RAM del sistema.

Configuración de memoria en Android Studio

Rishabh Sagar
fuente
FWIW org.gradle.daemon tiene el valor predeterminado verdadero para que esa línea no sea necesaria.
Smalls
22

La solución es aumentar la memoria de compilación de Android.

A medida que agrega más módulos a su aplicación, existe una demanda increíble en el sistema de compilación de Android y la configuración de memoria predeterminada no funcionará. Para evitar OutOfMemoryErrors durante las compilaciones de Android, debe descomentar la configuración de memoria gradle alternativa presente en /android/gradle.properties :

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

Puede encontrar gradle.properties dentro de la carpeta de Android .

PD

¿Qué estamos haciendo esto y por qué ayuda?

Permítanme aclarar algo de terminología básica para entender todo.

Daemon : - Un daemon es un programa de computadora que se ejecuta como un proceso en segundo plano, en lugar de estar bajo el control directo de un usuario interactivo.

Android Studio 2.1 habilita una nueva función: Dex In Process , que puede aumentar drásticamente la velocidad de las compilaciones completamente limpias, así como mejorar el rendimiento de Instant Run.

Para aprovechar Dex In Process , deberá modificar su archivo gradle.properties y aumentar la cantidad de memoria asignada a la VM Gradle Daemon en 1 Gb, a un mínimo de 2 Gb, utilizando la propiedad org.gradle.jvmargs :

Especifica los argumentos de JVM que se utilizan para el proceso de demonio. La configuración es particularmente útil para ajustar la configuración de la memoria.

org.gradle.jvmargs=-Xmx2048m

Valor por defecto:

-Xmx10248m -XX:MaxPermSize=256m

La asignación de memoria predeterminada de la VM de Gradle Daemon es de 1 gigabyte, lo cual es insuficiente para admitir dexInProcess, por lo que para aprovecharlo, deberá configurarlo en al menos 2 gigabytes.

Dex en proceso funciona al permitir que múltiples procesos DEX se ejecuten dentro de una sola VM que también se comparte con Gradle, por lo que debe asignar la memoria adicional antes de que pueda habilitarse; esa memoria se compartirá entre Gradle y múltiples procesos DEX.

Si ha aumentado el javaMaxHeapSize en su archivo build.gradle a nivel de módulo más allá del valor predeterminado de 1 gigabyte, necesitará aumentar la memoria asignada al Gradle Daemon correspondientemente.

Cuando hay suficiente memoria asignada, Dex in Process está habilitado de forma predeterminada, lo que mejora el rendimiento general de la compilación y elimina la sobrecarga de iniciar varias instancias de VM paralelas . El resultado es una mejora significativa en todos los tiempos de compilación, incluidas las compilaciones instantáneas, incrementales y completas.

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

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

Kailash Uniyal
fuente
1
¿Podría explicar qué está haciendo esto y por qué ayuda?
Alex
1
Pon las fuentes también. medium.com/google-developers/…
Rishabh Sagar
1
Hola @KailashUniyal, ¿qué pasa si tengo el tamaño de pila en 2048 en la interfaz gráfica de usuario de Android Studio y todavía obtengo 'Daemon expirando porque el espacio de pila de JVM está agotado'?
abdi
@abdi Intente poner esto org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8en gradle.properties. Si aún no funciona, lo siento, no tengo idea de cómo solucionarlo.
Kailash Uniyal
1
sin comentarios org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8en android/gradle.propertiesfuncionó como un encanto. ¡¡Gracias!! @KailashUniyal
vikas bansal