java - osx maven 运行测试异常 : java. lang.OutOfMemoryError 从线程 "main"中的 UncaughtExceptionHandler 抛出

标签 java android macos maven robolectric

我一直在尝试在 mac 上运行一个在 linux 下工作的现成的 maven 项目。打电话时 mvn clean install 它运行了一部分测试,然后出现以下错误:

线程“main”中的异常异常:从线程“main”中的 UncaughtExceptionHandler 抛出的 java.lang.OutOfMemoryError

我看到很多关于通过将 MAVEN_OPTS 添加到环境变量来修复 Perm gen 错误的问题。现在我的系统上有以下环境变量:

MAVEN_OPTS="-Xmx4096m -XX:MaxPermSize=4096m"

调用 mvn help:system 时,我可以在配置中看到这些选项。

该项目使用 Robolectric 进行测试,并且(大部分时间但不总是)在抛出异常之前打印以下行:

[DEBUG] ********************* **GC'ed SdkEnvironment 重用!

[错误] 无法在 org.robolectric.bytecode.AsmInstrumentingClassLoader@300abe53 中加载 org.robolectric.internal.ParallelUniverse

在 Activity 监视器中,当我开始测试时,我可以看到一个 java 进程开始运行。抛出异常前其内存占用达到1.4~1.5GB。

我还应该做些什么才能使其正常工作。 感谢您的帮助!

编辑 将内存选项添加到 sure fire 插件后:

           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-surefire-plugin</artifactId>
               <version>2.16</version>
               <configuration>
                   <argLine>-Xmx2048m -XX:MaxPermSize=2048m</argLine>
               </configuration>
           </plugin>

并运行 mvn clean install -e -X 我得到了以下堆栈跟踪:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test (default-test) on project android: Execution default-test of goal org.apache.maven.plugins:maven-surefire-plugin:2.17:test failed: There was an error in the forked process
[ERROR] java.lang.OutOfMemoryError: PermGen space
[ERROR] at java.lang.ClassLoader.defineClass1(Native Method)
[ERROR] at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
[ERROR] at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
[ERROR] at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
[ERROR] at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
[ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
[ERROR] at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
[ERROR] at java.security.AccessController.doPrivileged(Native Method)
[ERROR] at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
[ERROR] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[ERROR] at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
[ERROR] at org.apache.maven.surefire.report.SmartStackTraceParser.getMinimalThrowableMiniMessage(SmartStackTraceParser.java:166)
[ERROR] at org.apache.maven.surefire.report.SmartStackTraceParser.getString(SmartStackTraceParser.java:151)
[ERROR] at org.apache.maven.surefire.report.PojoStackTraceWriter.smartTrimmedStackTrace(PojoStackTraceWriter.java:61)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.java:328)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.encode(ForkingRunListener.java:312)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.toString(ForkingRunListener.java:258)
[ERROR] at org.apache.maven.surefire.booter.ForkingRunListener.testError(ForkingRunListener.java:132)
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:162)
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153)
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
[ERROR] -> [Help 1]

surefire 需要 2GB 内存,maven 需要 4GB。

最佳答案

我通过添加另一个神奇的环境变量解决了这个问题

JAVA_TOOL_OPTIONS="-Xmx1024m -XX:MaxPermSize=512m -Xms512m"

关于java - osx maven 运行测试异常 : java. lang.OutOfMemoryError 从线程 "main"中的 UncaughtExceptionHandler 抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24647558/

相关文章:

android - 没有缓存版本的 gradle

macos - Chrome : How to print PDF with original size (100%, 无缩放/收缩)

java - 在 Eclipse 上, "Preferences -> General -> Workspace -> Refresh using native hooks or polling"是做什么的?

java - B树和磁盘持久性

android - 我正在尝试制作一个应用程序,该应用程序从用户那里获取反馈输入,然后发送电子邮件。想法?

Android SQLite - 字符串以外的 selectionArgs

ruby-on-rails - 不兼容的库版本 : nokogiri. bundle 需要 8.0.0 或更高版本,但 libiconv.2.dylib 提供 7.0.0 版本

macos - Cocoa - 以编程方式重新排序 NSTableView 列

java - 如何使用二维指针通过 JNA 调用 C 函数?

java - 尝试理解泛型