如何解决如何修复:java.lang.OutOfMemoryError:为项目运行Junit时,请求的数组大小超出了VM限制
在运行Junit时遇到异常,不确定导致该问题的代码部分: (使用ANT-1.9.4,ANT_OPTS = -Xmx10G) ()
Tests run: 544,Failures: 1,Errors: 0,Time elapsed: 10,258.816 sec
[junit] Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
[junit] at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:300)
[junit] at java.lang.StringCoding.encode(StringCoding.java:344)
[junit] at java.lang.StringCoding.encode(StringCoding.java:387)
[junit] at java.lang.String.getBytes(String.java:958)
[junit] at org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter.endTestSuite(PlainJUnitResultFormatter.java:152)
[junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.fireEndTestSuite(JUnitTestRunner.java:619)
[junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:452)
[junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:911)
[junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:768)
运行测试并开始生成测试报告后,将引发异常。
这是配置junit的方式:
<junit fork="yes" newenvironment="false" haltonfailure="no" failureproperty="junit.failure" printsummary="yes" maxmemory="10096m">
解决方法
确定要使用ANT 1.9.4吗?
您的堆栈跟踪与ANT版本1.8.4中的PlainJUnitResultFormatter的源代码匹配:
out.write(sb.toString().getBytes());
而在ANT版本1.9.4中PlainJUnitResultFormatter的源代码中:
write(StringUtils.LINE_SEP);
发生异常的地方没有String.getBytes()
的呼叫。
问原因是来自ANT 1.9.4 release notes的评论:
- 更改为JUnitTestRunner和PlainJUnitResultFormatter以进行 OutOfMemoryErrors的可能性较小。 Bugzilla报告45536
因此解决方案是升级到ANT 1.9.4或更高版本
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。