使用可能なメモリに基づいてサイズを制限するLinkedHashMapを作成したいとします(つまり、freeMemory + (maxMemory - allocatedMemory)
が一定のしきい値を下回った場合)。これはキャッシュの形式として使用され、おそらくキャッシング戦略として「最も最近使用された」ものを使用します。LRU使用可能なメモリに基づいてサイズを制限するLinkedHashMap
私は懸念していますが、allocatedMemoryにはガベージコレクションされていないデータも含まれているため、使用されているメモリの量が過大に推定されます。私はこれが持つかもしれない意図しない結果に心配しています。
たとえば、空きメモリが不足していると考えられるため、削除されたアイテムがすぐにガベージコレクションされないため、LinkedHashMapはアイテムの削除を続けることがあります。
誰もこのタイプのことに経験がありますか?私の心配は正当なものですか?もしそうなら、誰かが良いアプローチを提案することができますか?
また、キャッシュを「ロック」することができます。基本的には「ok、今からメモリ使用の問題で何も削除しないでください」と言います。
ここにあなたのアプリケーションはありますか?背景の意図が何であるか分かりませんが、良い答えが出てくるのは難しいです。あなたのHashMapはキャッシュか何ですか? – jprete
jprete、私はこれを明確にしようとしました - あなたは正しいです、そのキャッシュ – sanity
これはGCとJavaメモリ管理が本当に面倒な顔を示す典型的な例です。このようなことをC++で行うのは簡単なことでしょう。 GCを使用すると、deleteやfreeなどのコマンドを実行することはできません。 –