O arquivo JAR do Android Studio do Google que causou o erro de limite superior do GC excedeu

210

Estou usando o Android Studio no OS X. Estou recebendo esta mensagem de erro:

FALHA: Falha na compilação com uma exceção.

  • O que deu errado: Falha na execução da tarefa ': app: preDexDebug'. com.android.ide.common.internal.LoggedErrorException: falha ao executar o comando: / Applications / Android Studio.app/sdk/build-tools/android-4.4W/dx --dex --output / Usuários / alex / AndroidStudioProjects / SilentSMS / app / build / intermediates / pré-dexed / debug / android-4.3_r2.1-f22bbff4d1017230e169a4844a9c2195f13060d2.jar /Users/alex/AndroidStudioProjects/SilentSMS/app/libs/android-4.3_r2.1.jar

    Código de erro: 3 Saída:

  UNEXPECTED TOP-LEVEL ERROR:
  java.lang.OutOfMemoryError: GC overhead limit exceeded
      at com.android.dx.cf.code.RopperMachine.getSources(RopperMachine.java:665)
      at com.android.dx.cf.code.RopperMachine.run(RopperMachine.java:288)
      at com.android.dx.cf.code.Simulator$SimVisitor.visitLocal(Simulator.java:612)
      at com.android.dx.cf.code.BytecodeArray.parseInstruction(BytecodeArray.java:412)
      at com.android.dx.cf.code.Simulator.simulate(Simulator.java:94)
      at com.android.dx.cf.code.Ropper.processBlock(Ropper.java:782)
      at com.android.dx.cf.code.Ropper.doit(Ropper.java:737)
      at com.android.dx.cf.code.Ropper.convert(Ropper.java:346)
      at com.android.dx.dex.cf.CfTranslator.processMethods(CfTranslator.java:282)
      at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:139)
      at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:94)
      at com.android.dx.command.dexer.Main.processClass(Main.java:682)
      at com.android.dx.command.dexer.Main.processFileBytes(Main.java:634)
      at com.android.dx.command.dexer.Main.access$600(Main.java:78)
      at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:572)
      at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
      at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
      at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
      at com.android.dx.command.dexer.Main.processOne(Main.java:596)
      at com.android.dx.command.dexer.Main.processAllFiles(Main.java:498)
      at com.android.dx.command.dexer.Main.runMonoDex(Main.java:264)
      at com.android.dx.command.dexer.Main.run(Main.java:230)
      at com.android.dx.command.dexer.Main.main(Main.java:199)
      at com.android.dx.command.Main.main(Main.java:103)

Estou usando esta biblioteca:

http://grepcode.com/snapshot/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/

Puxei o arquivo JAR e o adicionei ao meu projeto - o projeto que estou tentando criar é:

https://github.com/domi007/silentSMS/

Entendo que é porque meus valores xms e xmx são muito baixos. Aumentei-os em:

/ Applications / Android Studio.app/bin/idea.vmoptions, para que agora diga:

-Xms256m
-Xmx1024m

No entanto, ainda recebo o erro. O que isso poderia ser causado? Além do aplicativo silentSMS ser um projeto Eclipse e de eu portar o código no Android Studio, não mudei nada. Em termos de erros de localização do Android Studio - isso não acontece, e tudo o resto parece bem.

amlwwalker
fonte

Respostas:

547

Eu acho que existe uma maneira separada de aumentar o limite de heap da operação dexing. Adicione isso ao seu androidfechamento no seu build.gradlearquivo:

dexOptions {
    javaMaxHeapSize "4g"
}

e veja se isso ajuda.

(ideia cortesia desta resposta de Scott Barta )

CommonsWare
fonte
45
4gé um pouco exagerado, 2gtudo bem #
Hugo Gresse
3
Fantástico! Isso também corrigiu meu erro. Acho que quanto mais memória eu der, mais rápida será a compilação. Eu fui de mais de 1 minuto para 19 segundos.
Simon
2
Eu ainda obter o erro: java.lang.OutOfMemoryError: GC limite de sobrecarga excedido [org.gradle.api.internal.project.ant.AntLoggingAdapter] em java.util.BitSet.clone
IgorGanapolsky
7
Eu adicionei isso, mas eu ainda vejoOutOfMemoryError
Chad Bingham
8
não funcionou para mim, precisava subir em gradle.properties:org.gradle.jvmargs=-XX:MaxPermSize=1024m -Xms1024m -Xmx4096m -XX:ReservedCodeCacheSize=1024m
hmac
93

No meu caso, aumentar o tamanho da pilha é assim:

Usando o Android Studio 1.1.0

android {
    dexOptions {
        incremental true
        javaMaxHeapSize "2048M"
    }
}

Coloque o código acima no seu arquivo Build.gradle .

Dhruv Raval
fonte
4
isso funcionou para superar GC overhead limit exceededdepois que eu ativei o Multidexing. A exceção foi emat com.android.dx.command.dexer.Main.runMultiDex(Main.java:334)
Someone Somewhere
isso não vai ser um comentário, mas o erro do Android Studio mostrou `ERRO INESPERADO DE NÍVEL SUPERIOR: java.lang.OutOfMemoryError: limite de sobrecarga do GC excedido` O local da exceção estava no at com.android.dx.util.FixedSizeList.<init>(FixedSizeList.java:38)topo da pilha ecom.android.dx.command.dexer.Main.runMultiDex(Main.java:334) at com.android.dx.command.dexer.Main.run(Main.java:244) at com.android.dx.command.dexer.Main.main(Main.java:215) at com.android.dx.command.Main.main(Main.java:106)
Alguém em algum lugar
1
Mas, assim que adicionei, você sugeriu javaMaxHeapSize e parâmetros incrementais, o Android Studio conseguiu criar o aplicativo multi-dexed.
Someone Somewhere
se 2gb não for suficiente em algum momento, tentarei 4gb sugeridos pelo commonware.
Someone Somewhere
1
Obrigado. Observe o que os documentos dizem sobre incremental: isso tem muitas limitações e pode não funcionar. Use com cuidado.
Ferran Maylinch 15/09/2015
41

Esse novo problema é causado pela versão mais recente do Android.

Vá para a pasta raiz do projeto, abra gradle.propertiese adicione as seguintes opções:

org.gradle.daemon=true

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

org.gradle.parallel=true

org.gradle.configureondemand=true

Em seguida, adicione estas alterações no seu build.gradlearquivo:

dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
}
gurusiv
fonte
1
Aviso: A android.dexOptions.incrementalpropriedade está obsoleta e não tem efeito no processo de construção.
precisa saber é
isso resolveu meu problema. mas estou criando um arquivo chamado java_pid1512.hprof que é muito grande. Eu estou supondo que sua opção Dfile está criando? é necessário e você pode mostrar como remover o despejo de arquivo
j2emanue
1
@ j2emanue: Este arquivo foi criado devido à opção "HeapDumpOnOutOfMemoryError": docs.oracle.com/cd/E15289_01/doc.40/e15062/…
Mehlyfication
1
Pode precisar de atualização: incrementalé eliminada no final de 2018
cuasodayleo
no AS 3.4, ativando o "org.gradle.jvmargs = -Xmx2048m -XX: MaxPermSize = 512m -XX: + HeapDumpOnOutOfMemoryError -Dfile.encoding = UTF-8" no arquivo gradle.properties resolveu o problema para mim
JimmyFlash
4

Desativei o Instant Run por:

Preferências do Menu → CriarExecução Instantânea "Ativar Execução Instantânea no Código de Hot Swap"

Eu acho que é a Execução Instantânea que torna a compilação lenta e cria um arquivo pidXXX.hprof de tamanho grande que faz com que o limite de sobrecarga do AndroidStudio gc seja excedido.

(O SDK do meu dispositivo é 19.)

崔 乐天
fonte
Como você descobriu que foi o Instant Run que criou um arquivo hprof tão grande? Percebi um criado recentemente em nosso servidor GitLab, mas não temos a execução instantânea ativada.
AdamMc331 15/05/19
4

Android Studio 3.5.3

Encontre as configurações de memória (Cmd + Shift + A no Mac ou clique em Ajuda e comece a digitar "Configurações de memória") em Preferências / Configurações e aumente o tamanho da pilha de IDE e / ou o tamanho da pilha de Daemon. insira a descrição da imagem aqui

ericn
fonte
1
Obrigado, você salvou meu dia.
Virendra Pal Singh
1

Adicione isso ao arquivo build.gradle

dexOptions {
   javaMaxHeapSize "2g"
}
Ghulam Rasool
fonte
0

Eu forcei fechado todo o Java.exe do taskmanger, reiniciei o Android Studio e funcionou para mim

insira a descrição da imagem aqui

Hitesh Sahu
fonte
0

Para mim, nenhuma das respostas trabalhadas que vi aqui funcionou. Imaginei que ter a CPU trabalhando extremamente duro aquece o computador. Depois que fechei programas que consomem grandes quantidades de CPU (como o chrome) e esfriaram meu laptop, o problema desapareceu.

Para referência: eu tinha a CPU em 96% a 97% e o uso de memória acima de 2.000.000 K por um processo java.exe (que na verdade era um processo relacionado ao gradle).

olNoy
fonte
Como sua solução se relaciona com o problema ESPECÍFICO apresentado aqui?
precisa saber é o seguinte
Eu recebo o mesmo erro especificado acima: java.lang.OutOfMemoryError: GC limite de sobrecarga excedeu A solução que ofereceu resolvido esse erro para mim
olNoy
0

Estou usando Android Studio 3.4e a única coisa que funcionou para mim foi remover as seguintes linhas do meu build.gradlearquivo:

minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

Porque Android Studio 3.4é usando R8em full modee não é direta compatível comProguard

pableiros
fonte
2
Eu acho que isso não é uma solução quando você precisa liberar uma compilação ofuscada. Eu usei o gradle-5.2.1 com o Android Studio 3.4 e está funcionando bem mesmo com a minifyEnabled trueconfiguração pro-guard enquanto o gradle-5.1.1 estava tendo problemas semelhantes.
Vikas Patidar
Este é exatamente o oposto do que queremos. -1
Zun
Como eu disse, isso funcionou para mim e o erro se foi e, finalmente, consegui gerar o apk. Nenhuma das outras respostas funcionou no meu projeto.
Pableiros #
atualização Gradle para 5.2.1 run cammand em / projecto / android ./gradlew wrapper --gradle-version=5.2.1
Ashok Devatwal
0

no meu caso, edito meu gradle.properties:

nota: se você ativar minifyEnabled true:

remova esta linha:

android.enableR8=true

e adicione estas linhas em ur build.gradle, androidbloqueie:

  dexOptions {
        incremental = true
        preDexLibraries = false
        javaMaxHeapSize "4g" // 2g should be also OK
    }

espero que isso ajude alguém :)

sana ebadi
fonte
0

4G é um pouco exagerado, se você não quiser alterar o buildGradle, poderá usar FILE -> caches / reinícios inválidos.

Isso funciona bem para mim ...

Pabel
fonte
0

Em algum momento, uma cópia duplicada apply plugin: 'com.android.application'foi adicionada ao meu programa de compilação. Remover a cópia duplicada e verificar se todos os meus plugins de aplicação estavam na parte superior corrigiram o problema para mim.

mburst
fonte