2015-01-01 7 views
5

Ich habe ein Android-Projekt-Setup mit robolectric Tests mit insgesamt rund 2084 Unit-Tests jetzt. Aber ich habe Probleme mit dem Hinzufügen von mehr Tests wegen der java.lang.OutOfMemoryError: PermGen space.Android Robolectric Gradle - java.lang.OutOfMemoryError: PermGen Raum

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 

mit der Strack Spur, erhalte ich die

* 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) 
... 

In meinem `gradle.properties im Stammverzeichnis und mein Modulverzeichnis folgenden, ich folgenden und nichts funktionierte versucht setzen. Ich habe immer noch Probleme mit dem Speicher.

Ich habe die Optionen aus Android Studio Gradle Issue: OutOfMemoryError: PermGen space immer noch kein Glück versucht. Ich habe auch sonarRunner java.lang.OutOfMemoryError: PermGen space betrachtet.

Ich hoffe, dass Sie dabei Hilfe bekommen. Dank

+1

haben Sie überprüfen https://plumbr.eu/outofmemoryerror/permgen-space? – Abdellah

+0

Danke @Abdellah. Was ich verstehe, ist, dass ich viele Klassen, Methoden und was nicht das PermGen überladen hat. Die Information ist sehr nützlich. Was kann ich jetzt gerade tun? Ich verspotte viele Objekte in meinen Unit Tests und Spionage. Mein Android-Projekt verwendet viele Bibliotheken, was bedeutet, dass auch viele Klassen und Methoden hinzukommen. – lazypig

+1

Respect für 2048 Tests :) –

Antwort

1

Die Informationen angeben, dass ich haben sich versammelt.

Abdellah gab einige Einblicke in das Problem und es hat mit der Anzahl der insgesamt erstellten Klassen zu tun. "Sie haben überprüfen https://plumbr.eu/outofmemoryerror/permgen-space"

Eugen Martynov erwähnte auch die Parameter aus der Robolectric Gradle Plugin-Konfiguration, die ich hinzufügen kann. Link bei https://github.com/robolectric/robolectric-gradle-plugin#configuration-using-dsl

Das Hauptproblem mit meinem Code ist, dass mit einem begrenzten PermGen Raum, ich eine Menge von Spy-Objekten in Mockito erstellt, die den größten Teil des Raumes zu essen scheint.

8

eine größere Anzahl als 512m Versuchen: org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -Xms512m

bearbeiten

Als @Eugen Martynov erwähnen Wenn Sie robolectric gradle Plugin, können Sie sie als DSLconfiguration

+2

Vererben Roboclect-Tests diese Parameter von Gradle? Wenn Sie robolectric gradle plugin verwenden, können Sie sie in 'build.gradle' angeben https://github.com/robolectric/robolectric-gradel-plugin#configuration-using-dsl –

+0

Dieser Kommentar scheint die Antwort in Verbindung mit Abdellahs zu haben Antworten. – lazypig

Verwandte Themen