私はファイルを持っていて、ファイルからはHashMap<String, ArrayList<Objects>>
を設定しています。 HashMapのサイズは25であることを意味しますが、25キーとなりますが、リストは各キーの膨大な数百万レコードになります。大きなファイル処理のためのメモリ使用量を最適化する方法
私が今使っているのは、各キーがレコードのリストを取得し、スレッドを使ってそれらを並列処理することです。大きなファイルに直面するまで状況は良かったので、 "java.lang.OutOfMemoryError:Java heap space"に直面しています。
代わりに、オブジェクトのリストでHashMapを埋め込む最良の方法は何ですか?私が考えているのは、ファイルの25のオフセットを取得し、ファイルから読み込んだ行をarrayListに格納するのではなく、ファイルのオフセットを入れて、各スレッドに開始オフセットから終了オフセットまで繰り返すイテレータを与えることです。私はまだこの考えを試さなければならない。しかし、私が実行する前に、メモリ使用量を最適化するためのより良い方法を知りたいと思います。あなたはそれをどうするか必要なんHashMap
を移入した後
-Xmxコマンドラインパラメータを使用してJVMにさらにメモリを割り当てないのはなぜですか? –
ファイルは100GBもあり、このアプリケーションの複数の実行も頻繁に発生します。したがって、十分ではない可能性があり、同じメモリの問題になる可能性があります。 – Deepak
あなたのオフセットのアプローチは良いようです。 OSレベルで並行性の問題があるかもしれませんが、私は大きなファイルを25の別々のファイルに分け、それぞれのスレッドでそれぞれを処理します。あなたのHashMapは –