Expirando Daemon porque o espaço de heap da JVM está esgotado

94

Acabei de atualizar o Android Studio para 3.5 Beta 1 e estou começando

Expirando Daemon porque o espaço de heap da JVM está esgotado

mensagem enquanto a construção está em execução. Além disso, a construção está demorando mais para ser concluída. Alguém tem alguma ideia a respeito disso?

Rishabh Sagar
fonte
2
Veja aqui se isso ajuda: stackoverflow.com/questions/47207126/…
Juraj Martinka
1
@JurajMartinka sim, você está certo. ele foi corrigido após aumentar o tamanho máximo de heap do IDE . Então, eles apresentam uma nova opção chamada Memory Settings no Android Studio 3.5 mais recente. Tudo isso é feito para corrigir o vazamento de memória no Android Studio.
Rishabh Sagar

Respostas:

106

Consegui resolver isso para meu projeto React Native configurando o seguinte:

// 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"
    }
}
Jordan Grant
fonte
1
@MattBooth obrigado por me ajudar
Dishant Chanchad
2
quando adicionei este código, react-native-vector-icons não estava funcionando corretamente.
Amir Gorji
Muito obrigado. Um voto positivo não pode expressar minha gratidão.
pokumars
89

Isso pode ser corrigido aumentando o tamanho máximo de heap configurado para o projeto.

Por meio de IDE:

Adicione as linhas abaixo no arquivo gradle.properties. O tamanho da memória abaixo pode ser configurado com base na disponibilidade de RAM

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

Por meio da GUI:

Em Configurações, pesquise 'Configurações de memória' e aumente o tamanho máximo de heap IDE e o tamanho máximo de heap Daemon de acordo com a disponibilidade de RAM do sistema.

Configurações de memória no Android Studio

Rishabh Sagar
fonte
O padrão do FWIW org.gradle.daemon é verdadeiro para que essa linha não seja necessária.
Pequenos dias
25

A solução é aumentar a memória de construção do Android.

À medida que você adiciona mais módulos ao seu aplicativo, há uma demanda incrível colocada no sistema de compilação do Android e as configurações de memória padrão não funcionam. Para evitar OutOfMemoryErrors durante as compilações do Android, você deve descomentar a configuração de memória gradle alternativa presente em /android/gradle.properties :

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

Você pode encontrar gradle.properties dentro da pasta android .

PS

O que estamos fazendo e por que isso ajuda?

Deixe-me esclarecer algumas terminologias básicas para entender a coisa toda.

Daemon : - Um daemon é um programa de computador executado como um processo em segundo plano, em vez de estar sob o controle direto de um usuário interativo.

O Android Studio 2.1 habilita um novo recurso: Dex In Process , que pode aumentar drasticamente a velocidade de compilações limpas completas, bem como melhorar o desempenho do Instant Run.

Para aproveitar as vantagens do Dex In Process , você precisará modificar seu arquivo gradle.properties e aumentar a quantidade de memória alocada para a VM Gradle Daemon em 1 Gb, para um mínimo de 2 Gb, usando a propriedade org.gradle.jvmargs :

Especifica os argumentos JVM usados ​​para o processo daemon. A configuração é particularmente útil para ajustar as configurações de memória.

org.gradle.jvmargs=-Xmx2048m

Valor padrão:

-Xmx10248m -XX:MaxPermSize=256m

A alocação de memória padrão do Gradle Daemon VM é de 1 gigabyte - o que é insuficiente para suportar dexInProcess, portanto, para aproveitar as vantagens, você precisará configurá-lo para pelo menos 2 gigabytes.

O Dex em processo funciona permitindo que vários processos DEX sejam executados em uma única VM que também é compartilhada com o Gradle. É por isso que você precisa alocar a memória extra antes de poder ser habilitado - essa memória será compartilhada entre o Gradle e vários processos DEX.

Se você aumentou o javaMaxHeapSize em seu arquivo build.gradle de nível de módulo além do padrão de 1 gigabyte, você precisará aumentar a memória atribuída ao Gradle Daemon de forma correspondente.

Quando há memória suficiente atribuída, Dex in Process é habilitado por padrão, melhorando o desempenho geral de construção e removendo a sobrecarga de iniciar várias instâncias paralelas de VM . O resultado é uma melhoria significativa em todos os tempos de build, incluindo Instant Run, builds incrementais e completos.

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

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

Kailash Uniyal
fonte
1
Você poderia explicar o que isso está fazendo e por que ajuda?
Alex
1
Coloque as fontes também. medium.com/google-developers/…
Rishabh Sagar
1
Olá @KailashUniyal, e se eu tiver o tamanho de heap em 2048 na interface do Android Studio e ainda estiver recebendo 'Expiring Daemon porque o espaço de heap da JVM acabou'
abdi de
1
@abdi Tente colocar isso org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8em gradle.properties. Se ainda não estiver funcionando, desculpe, não tenho ideia de como consertar isso.
Kailash Uniyal
1
un-commenting org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8in android/gradle.propertiesfuncionou como um encanto. Obrigado!! @KailashUniyal
vikas bansal