ここに私のコードがあります:
public void mapTrace(String Path) throws FileNotFoundException, IOException {
FileReader arq = new FileReader(new File(Path));
BufferedReader leitor = new BufferedReader(arq, 41943040);
Integer page;
String std;
Integer position = 0;
while ((std = leitor.readLine()) != null) {
position++;
page = Integer.parseInt(std, 16);
LinkedList<Integer> values = map.get(page);
if (values == null) {
values = new LinkedList<>();
map.put(page, values);
}
values.add(position);
}
for (LinkedList<Integer> referenceList : map.values()) {
Collections.reverse(referenceList);
}
}
これは HashMap 構造です
Map<Integer, LinkedList<Integer>> map = new HashMap<>();
50mb ~ 100mb のトレース ファイルの場合は問題ありませんが、より大きなファイルの場合は次のようになります。
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: GC overhead limit exceeded
逆メソッドがメモリ使用量を増やしているかどうか、LinkedList が他のリスト構造よりも多くのスペースを使用しているかどうか、またはリストをマップに追加する方法が必要以上のスペースを使用しているかどうかはわかりません。何がそんなに多くのスペースを使用しているのか、誰か教えてもらえますか?