为了账号安全,请及时绑定邮箱和手机立即绑定

Junit java.lang.OutOfMemoryError 超出 GC 开销限制

Junit java.lang.OutOfMemoryError 超出 GC 开销限制

蓝山帝景 2022-06-30 11:36:29
我有以下@BeforeJUnit 测试方法:List<MyClass> allCombinations = new ArrayList<>();@Beforepublic void generateCombinations() {    int index = 0;    char[] binaryChars = null;    MyClass myMockObj = mock(MyClass.class);    for (int i = 0; i < Math.pow(2, 15); i++) {        binaryChars = StringUtils.leftPad(Integer.toBinaryString(i), variables).toCharArray();        when(myMockObj.method1()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method2()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method3()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method4()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method5()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method6()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method7()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method8()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method9()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method10()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method11()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method12()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method13()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method14()).thenReturn(binaryChars[index++] == '0');        when(myMockObj.method15()).thenReturn(binaryChars[index++] == '0');        allCombinations.add(myMockObj);        index = 0;    }}此方法引发以下错误:java.lang.OutOfMemoryError: GC overhead limit exceededClose stacktraceat java.util.Arrays.copyOf(Arrays.java:3236)我从这里了解错误是什么。但是,我不知道上面代码中出现此错误的原因。
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

JUnit 的一个有趣特性是它为您运行的每个测试用例创建一个测试类的实例,并且在所有测试都运行之前,这些实例不会为 GC 释放。


因此,如果您在测试用例中将大量数据分配给实例变量(例如在每次测试之前运行的 generateCombinations 方法中),您必须在测试后手动释放数据。


尝试添加方法


@After

public void cleanup() {

    allCombinations  = null;

}

我们制作了一个工具,它可以通过反射自动完成。


如果清理测试类没有帮助,那么你只需要投入更多的内存......


查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号