2010年5月11日火曜日

Effective javaまとめ5 廃れたオブジェクト参照を取り除く3

ミッドナイトミートエクスプレスという映画を見ました。
ウェスクレイヴンというホラー映画監督のです。
ほんとーに久々におもろかったでぇ

前回の自分のブログを読んでみましたが、とても意味がわかりにくい・・
自分が理解するより、アウトプットする方が難しいです・・

------------------------------------------------------
■項目5 廃れたオブジェクト参照を取り除く3

前回、意味をなさなくなったキャッシュオブジェクトをガーベージコレクトする方法を1つ記しました。
今回はもう1つの方法を記します。

それは、「オブジェクトをキャッシュしてからある程度の時間が経過したら、そのキャッシュオブジェクトを破棄する」という方法です。

上記は、java.util.Timer APIを使用し、バックグランドのスレッドにより行うこともできますし、java.util.LinkedHashMapのremoveEldestEntryメソッドのように、キャッシュに新たなオブジェクトを追加した際の副作用として実現することもできます。

LinkedHashMapのputメソッドは、自身に新たなエントリを追加する際、removeEldestEntryを呼び出します。
removeEldestEntryがtrueを返した場合、自身のキャッシュに含まれる一番古いオブジェクトを削除します。
removeEldestEntryはデフォルトではfalseを返しますので、オーバーライドし、目的に応じてtrueを返すようにします。javadocでは以下のような実装方法をサンプルとして挙げています。

----------------------------------------------------
private static final int MAX_ENTRIES = 100;

protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_ENTRIES;
}
----------------------------------------------------

特定のサイズまでキャッシュしたら、以降は古いものから破棄していく、という方法です。
これなら、キャッシュがどんどん肥大していくことは無いです。

--> なんかまとまりませんでしたが、おわりです。

0 件のコメント:

コメントを投稿