1

こんにちは、2G ファイルをメモリにロードする Java プログラムを作成しています。データは次の形式のグラフです。

node_number: edge_point_1 edge_point_2 ... edge_point_k

隣接リストとしてメモリにインポートしたいのですが、ガベージコレクタの超過エラーが発生します。

ファイルがメモリにロードされていることに気付きましたが、問題はリンクリストの作成中にあります。これが私のコードです:

while ((line = reader.readLine()) != null) {
    Integer n1 = line.indexOf(":"), n2;
    Integer k = Integer.parseInt(line.substring(0, n1));
    n1 = n1 + 2;
    lists[k] = new LinkedList<Integer>();
    do {
        n2 = line.indexOf(" ", n1);
        if (n2 == -1)
            lists[k].add(Integer.parseInt(line.substring(n1, line.length())));
        else
            lists[k].add(Integer.parseInt(line.substring(n1, n2)));
        n1 = n2 + 1;
    } while (n2 != -1);
}

私のコードの何が問題なのか誰にもわかりませんか? Netbeans の最新ビルドでコンパイルしています。

4

1 に答える 1

2

単純にメモリを消費しすぎます。それを減らして、メモリ制限を増やしてください。

メモリを減らす

の代わりにLinkedList<Integer>おそらく 50 バイトを必要とするものを使用しています。簡単な手順として、 に切り替えて半分を保存します。より難しいステップとして、必要に応じて自分で使用してサイズを変更します。int10ArrayList<Integer>int[]

メモリ制限を増やす

でJVMを起動します

java -Xmx8G

8 GB の空きメモリがある場合。

于 2013-10-29T02:13:33.433 に答える