私のアプリケーションで生成されたデータをメモリにキャッシュしたいが、メモリが不足する場合は、データをディスクにスワップしたい。空きメモリが少ない場合にのみデータをディスクにスワップする書き込みキャッシュを実装する方法
理想的には、VMがメモリを必要とし、データをディスクに書き込み、メモリを解放することが理想です。しかし私はの前にのOutOfMemoryError
がどこかで(ほとんどの場合、どのような方法でもキャッシュに関係しないコードで)発生することを通知する方法で自分自身をVMにフックする方法はありません。
java.lang.ref
の参照クラスは、この場合には使用されていないようですが、その参照メカニズム(ReferenceQueue
)は、GCによって参照がすでに再要求された後にのみトリガーされます。それでは、データをディスクに保存するのは遅すぎるでしょう。
ヒープメモリを効率的に管理するための代替手段はありますか? (絶対に避けられないまで、ディスクにスワップしていない)
EDIT1:コメントへの応答では、「OSが既にあなたのためのことを行います」 - メモリOSの量 - これが唯一の問題の一部を覆います割り当てることができるは、限定リソースですです。ここで考慮される必要があるOSが使用できるメモリの量以外の制限もあります
- VMのアーキテクチャによる制限(
32-Bit VM
) - に割り当てることのできるメモリの上限VMのプロセスは、(
32-Bit OS
) - 制限は、おそらく場合でも、メモリ不足からそれを防ぐことはできませんだけで無制限のヒープサイズでVMを実行している
-Xmx
オプション
を使用してVMに課さOS依然として十分な利用可能性がありますが、これは上記の理由でVMに利用できない可能性があります。
ほとんどのオペレーティングシステムがこれを処理します。なぜそれを再実装したいのですか? –
そして、上記のコメントを強化する:http://en.wikipedia.org/wiki/Paging – jweyrich
@George通常、ディスクに何が入っているのか、そうでないのかを選ぶことはできません。非常に頻繁にアクセスしない仮想メモリからロードしたくないミッションクリティカルなデータがあるかもしれませんが、OSはそこに置くことに決めました。 – corsiKa