4

こんにちは私は自然言語処理のスペル修正プロジェクトに取り組んでおり、サイズが6.2 MB1GBのファイルからデータを読み取ることになっています。正常に動作している間、私が直面している問題は、Javaプログラムを実行するたびにデータをメモリにロードする必要があり、実行するたびに同じ時間がかかることです。

このデータをJavaのメモリにキャッシュする方法はありますか?誰かが私にそれの回避策を提案できますか?

基本的に私が知りたいのは、大きなファイルの内容をメモリに保存して、再度読み取る必要がないようにする手順は何ですか?ファイルがGBであるとしましょう。

4

4 に答える 4

5

6.2 MBのデータは、比較的少量のデータであり、ロードにそれほど時間がかからないため、オペレーティングシステムのキャッシュに保存される可能性があります。時間がかかるのはこのデータの解析であるかどうかを調査し、解析されたデータをバイナリファイルにキャッシュしてすばやくロードする必要があります。

于 2012-08-10T08:08:13.587 に答える
4

6.2 MBはそれほど大きくはありません。これに時間がかかり、バックグラウンドスレッドを使用してファイルをロードできない場合を除いて、心配する必要はありません。

メモリマップトファイルを使用できますが、これらのファイルの操作はそれほど簡単ではありません。メモリマップトファイルは、1GBから1TBのデータがある場合に役立ちます。

于 2012-08-10T07:55:17.697 に答える
2

ここで、ファイルからのデータのロード/解析とキャッシュの作成により、時間の遅延が発生していることがわかりました。毎回これを行うことで時間を節約したいと考えています。

この場合、EHcacheを使用することをお勧めします。EHcache(ofcourceオープンソースでApacheライセンス)は、cahceを維持し、アプリケーションのメモリ不足エラーを防ぎ、cahceの状態をディスクに保存します。

したがって、アプリケーションの次回の起動時に、EHcahceデータファイルから直接起動するようにアプリケーションを構成できます。これにより、ファイルを何度も解析する必要がなくなります。

使用しているcahceをメモリにロードすることはできますが、違いはEHCacheAPIを介してロードすることだけです。

于 2012-08-10T08:10:07.020 に答える
1

プログラムをコーディング/デバッグする予定で、変更のたびにリソースをリロードするのに時間がかかりすぎると思われる場合は、 JRebel Socialを検討してください(これが非営利プロジェクトの場合、またはJRebelの場合)。これにより、VMを再起動せずにコードのバグを修正したり、変更を加えたりできるため、キャッシュを使用したり、VMを再起動したりすることなく、読み込まれたデータ(静的変数に保存されるなど)を保持できます。私の前の質問を参照してください:Javaで一度リソースをロードします。ただし、本番用であり、ロード時間を節約するよりもメモリを節約することを目的としている場合(ほとんどの場合、起動時にのみ問題が制限されます)、EhCacheまたは他のキャッシュライブラリで十分です。

于 2012-08-11T02:06:58.607 に答える