Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

ソフト参照を使ってメモリの枯渇に対処する

Java魂―プログラミングを極める匠の技

Java魂―プログラミングを極める匠の技


でソフト参照については学んでたんだけど、いつ使うのかわからなかった。

ソフト参照とは、「ヒープ上のメモリが少ない場合のみに削除される」参照だ。

GCで弱い参照はすべて削除されるが、それでも枯渇しているときソフト参照のオブジェクトを削除する。

Java魂ではキャッシュマネージャなどのツールに便利とあったけど、それってあまり使い道がないな、と考えてた。

Release It! 本番用ソフトウェア製品の設計とデプロイのために

Release It! 本番用ソフトウェア製品の設計とデプロイのために


でなるほど、と思った。

Webアプリケーションで巨大なオブジェクトをセッションに保持しなければならないときに、ソフト参照でオブジェクトをラップしてセッションに保持する、と。

(セッションに巨大なオブジェクトを保持しない、というのが一番だけど)

これは実用的で納得のいく使い方。

予想を超えたアクセスなどで大量にセッションを作成してメモリを使用したとき、仮にそれぞれのユーザーに対して巨大なオブジェクトをセッションに保持すれば、あっという間にメモリが枯渇する。

もしソフト参照を利用していれば、OutOfMemoryを出さずに稼働させることができる、

少なくともセッションのメモリ利用でダウンすることはなくなる。

「Release It!」のよい点はケーススタディが実際に起こった障害を基にしているから実践的であることと、対処法がいくつもあってそれぞれ具体的であるというところがすごくいい。