gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:34 25 4
gpt4 key购买 nike

我有以下用于 JUnit 测试的 @Before 方法:

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)

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

最佳答案

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

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

尝试添加方法

@After
public void cleanup() {
allCombinations = null;
}

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

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

关于java - Junit java.lang.OutOfMemoryError 超出 GC 开销限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54801375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com