2015-01-01 12 views
5

Mam androidową konfigurację projektu z testami robolektycznymi, w sumie około 2084 testów jednostkowych już teraz. Ale mam problemy z dodawaniem kolejnych testów ze względu na java.lang.OutOfMemoryError: PermGen space.Android Robolectric Gradle - java.lang.OutOfMemoryError: PermGen space

objc[11380]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. 
java.lang.OutOfMemoryError: PermGen space       
Exception in thread "Test worker" java.lang.OutOfMemoryError: PermGen space 
Exception in thread "Thread-0" java.lang.OutOfMemoryError: PermGen space 
:app:testDebug FAILED 

z Strack śladu, pojawia się następujący

* Exception is: 
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:testDebug'. 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) 
     at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) 
     at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) 
     at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) 
     at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) 
     at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java 
... 
Caused by: org.gradle.process.internal.ExecException: Process 'Gradle Test Executor 1' finished with non-zero exit value 1 
    at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:365) 
    at org.gradle.process.internal.DefaultWorkerProcess.waitForStop(DefaultWorkerProcess.java:161) 
    at org.gradle.api.internal.tasks.testing.worker.ForkingTestClassProcessor.stop(ForkingTestClassProcessor.java:86) 
    at org.gradle.api.internal.tasks.testing.processors.RestartEveryNTestClassProcessor.endBatch(RestartEveryNTestClassProcessor.java:60) 
    at org.gradle.api.internal.tasks.testing.processors.RestartEveryNTestClassProcessor.stop(RestartEveryNTestClassProcessor.java:54) 
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) 
... 

W moim `gradle.properties w katalogu głównym i mojego katalogu modułu, próbowałem wprowadzenie następujących i nic nie działało. Nadal mam problem z pamięcią.

org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m -Xms512m 

Próbowałem opcji od Android Studio Gradle Issue: OutOfMemoryError: PermGen space nadal bez powodzenia. Też patrzę na sonarRunner java.lang.OutOfMemoryError: PermGen space.

Mam nadzieję, że otrzymam pomoc w tej sprawie. Dzięki

+1

masz sprawdzić https://plumbr.eu/outofmemoryerror/permgen-space? – Abdellah

+0

Dziękuję @Abdellah. Rozumiem, że mam dużo zajęć, metod i czego nie przeciążam PermGenem. Informacje są bardzo przydatne. Więc co mogę teraz zrobić? Kpiąc z wielu przedmiotów w swoich testach jednostkowych i szpieguję. Mój projekt Android korzysta z wielu bibliotek, co oznacza także sprowadzanie wielu klas i metod. – lazypig

+1

Szacunek dla 2048 testów :) –

Odpowiedz

1

informację, że ja zebrałem się.

Abdellah dał pewien wgląd w problem i ma to związek z liczbą wszystkich utworzonych klas. "masz sprawdzić https://plumbr.eu/outofmemoryerror/permgen-space"

Eugen Martynov wspomniał również parametr z konfiguracji wtyczki gradacji robolectric, którą mogę dodać. Link pod numerem https://github.com/robolectric/robolectric-gradle-plugin#configuration-using-dsl

Głównym problemem z moim kodem jest to, że przy ograniczonej przestrzeni PermGen, tworzyłem wiele obiektów Szpiega w Mockito, które wydają się pochłaniać większość przestrzeni.

8

Spróbuj większą liczbę niż 512MB: org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -Xms512m

Edycja

Jak @Eugen Martynov wspomnieć Jeśli używasz robolectric Gradle wtyczki, można określić je jako DSLconfiguration

+2

Czy testy robotyczne dziedziczą te parametry z gradle? Jeśli używasz wtyczki gradacyjnej robolectric, możesz określić je w 'build.gradle' https://github.com/robolectric/robolectric-gradle-plugin#configuration-using-dsl –

+0

Ten komentarz wydaje się mieć odpowiedź w połączeniu z Abdellah's odpowiedź. – lazypig

Powiązane problemy