我寫了一段代碼。我面臨的問題是,當for循環的「j」超過1000時,我開始出現「GC超出限制」的錯誤。如果我將分配的內存增加到4GB,我可以迭代到2000年之後出現相同的問題。我想保留這個增加內存的選項作爲最後的手段,並且想要嘗試擴展我的代碼。編譯器強調了我放置箭頭的語句的問題。 有人可以請指導我,這可能是可能的錯誤。 我已經訪問過這個問題Error java.lang.OutOfMemoryError: GC overhead limit exceeded代碼中超出了GC開銷限制
for (int j=1; j<=num_doc; j++) {
List<Integer> list1 = new ArrayList<Integer>(Collections.nCopies(129039, 0));
BufferedReader fl = new BufferedReader(new FileReader(dataFolder+"file"+ " ("+j+")"+".int"));
String line1;
while((line1=fl.readLine()) != null) {
String[] arr=line1.split(" ");//<---------------------
line1="";
int k = Integer.parseInt(arr[0]);
Arrays.fill(arr, "");
numb=numb+1;
int temp=(list1.get(k))+1;
list1.set(k, temp);
}
F_d.add(numb);
numb=0;
fl.close();
ls2d.add(new ArrayList<Integer>(list1));//<---------------------
list1.clear();
}
地方你清楚'ls2d'在你的代碼? –
是使用ls2d。我只粘貼了編譯器突出顯示的那部分代碼。 – Shahzaib
'list1'已經很大了,所以如果你花時間把它添加到'ls2d'而不清除它,它會很快佔用很多內存,導致Omega –