Android Robolectric Gradle - java.lang.OutOfMemoryError: PermGen space 安卓Robolectric Gradle - java.lang.OutOfMemoryError: PermGen空间

5

我有一个安卓项目,使用robolectric测试,目前总共大约有2084个单元测试。但是我添加更多测试时遇到了问题,因为出现了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   

通过堆栈跟踪,我得到以下结果。
* 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)
...

在我的根目录和模块目录的`gradle.properties`中,我尝试了以下内容,但仍然遇到了内存不足的问题。
org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=512m -Xms512m

我尝试了来自Android Studio Gradle Issue: OutOfMemoryError: PermGen space的选项,但仍然没有成功。我也一直在查看sonarRunner java.lang.OutOfMemoryError: PermGen space

希望能得到一些帮助。谢谢。


1
你有检查过 https://plumbr.eu/outofmemoryerror/permgen-space 吗? - TooCool
谢谢@Abdellah。我的理解是我有很多类、方法和其他东西,这些都会超载PermGen。这些信息非常有用。那么现在我该怎么办呢?我在我的单元测试中模拟了很多对象,并进行了监视。我的Android项目使用了很多库,这意味着也带来了很多类和方法。 - lazypig
1
尊重2048个测试 :) - Eugen Martynov
3个回答

8

请尝试将数值调大至512m以上:org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=1024m -Xms512m

编辑

如@Eugen Martynov所述,如果您使用Robolectric Gradle插件,可以通过DSL配置指定它们。


2
Robolectric测试是否可以从Gradle继承这些参数?如果您使用Robolectric Gradle插件,可以在build.gradle中指定它们。https://github.com/robolectric/robolectric-gradle-plugin#configuration-using-dsl - Eugen Martynov
这个评论似乎与Abdellah的回答结合起来有答案。 - lazypig

1

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接