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

我有以下@BeforeJUnit 测试方法:


List<MyClass> allCombinations = new ArrayList<>();


@Before

public 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 stacktrace

at java.util.Arrays.copyOf(Arrays.java:3236)

我从这里了解错误是什么。但是,我不知道上面代码中出现此错误的原因。


蓝山帝景
浏览 154回答 1
1回答

智慧大石

JUnit 的一个有趣特性是它为您运行的每个测试用例创建一个测试类的实例,并且在所有测试都运行之前,这些实例不会为 GC 释放。因此,如果您在测试用例中将大量数据分配给实例变量(例如在每次测试之前运行的 generateCombinations 方法中),您必须在测试后手动释放数据。尝试添加方法@Afterpublic void cleanup() {&nbsp; &nbsp; allCombinations&nbsp; = null;}我们制作了一个工具,它可以通过反射自动完成。如果清理测试类没有帮助,那么你只需要投入更多的内存......
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java