cvj2.util
クラス SizeCacheMap<K,V extends SizeCountable>

java.lang.Object
  上位を拡張 cvj2.util.SizeCacheMap<K,V>

public class SizeCacheMap<K,V extends SizeCountable>
extends java.lang.Object

キーに対応する値をキャッシュするMap。

 オブジェクトのバイトサイズによる容量制限があり、古いデータは自動的に消す。
 スレッドセーフに使用できる。
 
 ※) サイズの取得は synchronized の内部で行ってはいけない。
 サイズ取得メソッドの中で何らかのロックを取得していると、
 別のスレッドが同じロックを取得してから、このクラスのメソッドを呼ぶとデッドロックする。
 (よって、サイズ取得は synchronized でない put() メソッドで行ってから synchronized の put() を呼んでいる。)
 
 ※2) SizeCountable を使用せずに、put() の引数に size を入れておけば問題なかった。
 とりあず、教訓として実装はこのままにしておく。
 


入れ子のクラスの概要
static interface SizeCacheMap.RemoveCallback<K,V extends SizeCountable>
          削除された時のコールバック
 
コンストラクタの概要
SizeCacheMap(long limit)
           
SizeCacheMap(long limit, SizeCacheMap.RemoveCallback<K,V> callback, boolean callbackOnOverwrite)
          コンストラクタ
 
メソッドの概要
 void clear()
          キャッシュクリア
 boolean exists(K key)
          存在チェック (データの新旧を更新しない)
 V get(K key)
          データを取得する
 long getLimit()
          容量制限の取得
 long getTotalBytes()
          現在容量の取得
 void put_sync(K key, V val, long valSize)
           
 void put(K key, V val)
          データをキャッシュにセットする
 void setLimit(long limit)
          容量制限の設定
 int size()
          オブジェクト数の取得
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

SizeCacheMap

public SizeCacheMap(long limit,
                    SizeCacheMap.RemoveCallback<K,V> callback,
                    boolean callbackOnOverwrite)
コンストラクタ


SizeCacheMap

public SizeCacheMap(long limit)
メソッドの詳細

exists

public boolean exists(K key)
存在チェック (データの新旧を更新しない)


get

public V get(K key)
データを取得する

戻り値:
存在しないなら、null

put

public void put(K key,
                V val)
データをキャッシュにセットする

パラメータ:
key - データのキー
val - データ

put_sync

public void put_sync(K key,
                     V val,
                     long valSize)

setLimit

public void setLimit(long limit)
容量制限の設定


getLimit

public long getLimit()
容量制限の取得


getTotalBytes

public long getTotalBytes()
現在容量の取得


size

public int size()
オブジェクト数の取得


clear

public void clear()
キャッシュクリア