亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號