0

すぐには必要とされず、ディスクからロードされず、アルゴリズムによって生成された空間データのメモリ内キャッシュを保存したいという状況に遭遇しました。データは空間的にアクセスされるため、無関係な要因と最新の読み取り操作の場所からの距離に基づいて、データがキャッシュから削除されます。問題は、Javaのガベージコレクションがこのシステムとうまく統合されていないように見えることです。データの空間知識を使用して、JVMによってデータをガベージコレクションできるようにしたいと思います。これらのキャッシュオブジェクトをガベージコレクタブルとしてマークする方法はありますか?JVMでメモリ不足の例外が発生した場合、その例外をキャッチしてキャッシュオブジェクトを削除し、メモリを解放する方法はありますか?

それとも、これは物事を行うための間違った方法ですか?

4

1 に答える 1

2

これらのキャッシュオブジェクトをガベージコレクタブルとしてマークする方法はありますか?

最も簡単な方法は保存することです

  • LRUキャッシュとして可能な、LinkedHashMapなどの強力な参照を持つ一部のデータ。
  • 可能であればSoftReferencesキャッシュに保持したいデータ。これらはすぐにはクリーンアップされませんが、OOMEの前にクリーンアップされます。
  • WeakHashMapでほとんどコストをかけずに破棄できるデータ。このデータは、GCが実行されるまで利用できます。

JVMでメモリ不足の例外が発生した場合、その例外をキャッチしてキャッシュオブジェクトを削除し、メモリを解放する方法はありますか?

これは可能ですが、ほぼすべてのスレッドのどこにでもエラーがスローされる可能性があるため、理想的ではありません。

于 2012-09-14T09:58:47.957 に答える