Java EE 5 SDK

com.sun.appserv.util.cache
Class MultiLruCache

java.lang.Object
  extended by com.sun.appserv.util.cache.BaseCache
      extended by com.sun.appserv.util.cache.MultiLruCache
All Implemented Interfaces:
Cache
Direct Known Subclasses:
BoundedMultiLruCache

public class MultiLruCache
extends BaseCache

MultiLruCache -- in-memory bounded LRU cache with multiple LRU lists Underlying Hashtable is made into logical segments, with each segment having its own LRU list.


Nested Class Summary
 
Nested classes/interfaces inherited from class com.sun.appserv.util.cache.BaseCache
BaseCache.CacheItem
 
Field Summary
static int DEFAULT_HASHTABLE_SEGMENT_SIZE
           
protected  int[] listsLength
           
static int LRU_HEAD
           
static int LRU_TAIL
           
 
Fields inherited from class com.sun.appserv.util.cache.BaseCache
_rb, bucketLocks, buckets, entryCount, listeners, maxBuckets, refreshFlags, threshold
 
Constructor Summary
MultiLruCache()
           
 
Method Summary
protected  BaseCache.CacheItem createItem(int hashCode, Object key, Object value, int size)
          create new item
 Object getStatByName(String key)
          get the desired statistic counter
 Map getStats()
          get the stats snapshot
protected  void handleOverflow()
          cache has reached threshold so trim its size. subclasses are expected to provide a robust cache replacement algorithm.
protected  void incrementTrimIndex()
           
 void init(int maxCapacity, Properties props)
          initialize the LRU cache
protected  void itemAccessed(BaseCache.CacheItem item)
          this item is accessed
protected  BaseCache.CacheItem itemAdded(BaseCache.CacheItem item)
          this item is just added to the cache
protected  void itemRefreshed(BaseCache.CacheItem item, int oldSize)
          item value has been refreshed
protected  void itemRemoved(BaseCache.CacheItem item)
          item value has been removed from the cache
protected  BaseCache.CacheItem trimLru(int segment)
          remove an lru item from one of the LRU lists
 
Methods inherited from class com.sun.appserv.util.cache.BaseCache
_put, _remove, _removeItem, add, add, addCacheListener, clear, clearStats, contains, decrementEntryCount, destroy, elements, eq, get, get, getAll, getEntryCount, getIndex, getIndex, hash, incrementAddCount, incrementEntryCount, incrementHitCount, incrementMissCount, incrementOverflowCount, incrementRefreshCount, incrementRemovalCount, init, isEmpty, isThresholdReached, keys, loadValue, notifyRefresh, put, put, remove, remove, remove, removeAll, trimExpiredEntries, trimItem, values, waitRefresh
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LRU_HEAD

public static final int LRU_HEAD
See Also:
Constant Field Values

LRU_TAIL

public static final int LRU_TAIL
See Also:
Constant Field Values

DEFAULT_HASHTABLE_SEGMENT_SIZE

public static final int DEFAULT_HASHTABLE_SEGMENT_SIZE
See Also:
Constant Field Values

listsLength

protected int[] listsLength
Constructor Detail

MultiLruCache

public MultiLruCache()
Method Detail

init

public void init(int maxCapacity,
                 Properties props)
          throws Exception
initialize the LRU cache

Specified by:
init in interface Cache
Overrides:
init in class BaseCache
Parameters:
maxCapacity - maximum number of entries this cache may hold
props - opaque list of properties for a given cache implementation
Throws:
Exception

createItem

protected BaseCache.CacheItem createItem(int hashCode,
                                         Object key,
                                         Object value,
                                         int size)
create new item

Overrides:
createItem in class BaseCache
Parameters:
hashCode - for the entry
key - Object key
value - Object value
size - size in bytes of the item subclasses may override to provide their own CacheItem extensions e.g. one that permits persistence.

trimLru

protected BaseCache.CacheItem trimLru(int segment)
remove an lru item from one of the LRU lists

Parameters:
the - LRU segment index to trim
Returns:
the item that was successfully trimmed

itemAdded

protected BaseCache.CacheItem itemAdded(BaseCache.CacheItem item)
this item is just added to the cache

Overrides:
itemAdded in class BaseCache
Parameters:
item - CacheItem that was created
Returns:
a overflow item; may be null Cache bucket is already synchronized by the caller

itemAccessed

protected void itemAccessed(BaseCache.CacheItem item)
this item is accessed

Overrides:
itemAccessed in class BaseCache
Parameters:
item - CacheItem accessed Cache bucket is already synchronized by the caller

itemRefreshed

protected void itemRefreshed(BaseCache.CacheItem item,
                             int oldSize)
item value has been refreshed

Overrides:
itemRefreshed in class BaseCache
Parameters:
item - CacheItem that was refreshed
oldSize - size of the previous value that was refreshed Cache bucket is already synchronized by the caller

itemRemoved

protected void itemRemoved(BaseCache.CacheItem item)
item value has been removed from the cache

Overrides:
itemRemoved in class BaseCache
Parameters:
item - CacheItem that was just removed Cache bucket is already synchronized by the caller

handleOverflow

protected void handleOverflow()
cache has reached threshold so trim its size. subclasses are expected to provide a robust cache replacement algorithm.

Overrides:
handleOverflow in class BaseCache

incrementTrimIndex

protected void incrementTrimIndex()

getStatByName

public Object getStatByName(String key)
get the desired statistic counter

Specified by:
getStatByName in interface Cache
Overrides:
getStatByName in class BaseCache
Parameters:
key - to corresponding stat
Returns:
an Object corresponding to the stat See also: Constant.java for the key

getStats

public Map getStats()
get the stats snapshot

Specified by:
getStats in interface Cache
Overrides:
getStats in class BaseCache
Returns:
a Map of stats See also: Constant.java for the keys

Java EE 5 SDK

Submit a bug or feature

Copyright 2006 Sun Microsystems, Inc. All rights reserved.