org.apache.jcs.engine.memory.lru
Class LRUMemoryCache

java.lang.Object
  extended byorg.apache.jcs.engine.memory.AbstractMemoryCache
      extended byorg.apache.jcs.engine.memory.lru.LRUMemoryCache
All Implemented Interfaces:
MemoryCache, java.io.Serializable

public class LRUMemoryCache
extends AbstractMemoryCache

A fast reference management system. The least recently used items move to the end of the list and get spooled to disk if the cache hub is configured to use a disk cache. Most of the cache bottelnecks are in IO. There are no io bottlenecks here, it's all about processing power. Even though there are only a few adjustments necessary to maintain the double linked list, we might want to find a more efficient memory manager for large cache regions. The LRUMemoryCache is most efficeint when the first element is selected. The smaller the region, the better the chance that this will be the case. < .04 ms per put, p3 866, 1/10 of that per get

Version:
$Id: LRUMemoryCache.java,v 1.21 2003/08/22 11:57:19 mpoeschl Exp $
Author:
Aaron Smuts, James Taylor, John McNally
See Also:
Serialized Form

Nested Class Summary
 class LRUMemoryCache.IteratorWrapper
           
 class LRUMemoryCache.MapEntryWrapper
           
 
Field Summary
private  MemoryElementDescriptor first
           
private  MemoryElementDescriptor last
           
private static org.apache.commons.logging.Log log
           
 
Fields inherited from class org.apache.jcs.engine.memory.AbstractMemoryCache
attr, cache, cacheName, cattr, chunkSize, map, status
 
Constructor Summary
LRUMemoryCache()
           
 
Method Summary
private  void addFirst(ICacheElement ce)
          Adds a new node to the start of the link list.
private  void addLast(CacheElement ce)
          Adds a new node to the end of the link list.
 void dumpCacheEntries()
          Dump the cache entries from first to list for debugging.
private  int dumpCacheSize()
           
 void dumpMap()
          Dump the cache map for debugging.
 ICacheElement get(java.io.Serializable key)
          Get an item from the cache
 java.util.Iterator getIterator()
          Gets the iterator attribute of the LRUMemoryCache object
 java.lang.Object[] getKeyArray()
          Get an Array of the keys for all elements in the memory cache
 ICacheElement getQuiet(java.io.Serializable key)
          Get an item from the cache without affecting its last access time or position.
 void initialize(CompositeCache hub)
          For post reflection creation initialization
 void makeFirst(ICacheElement ce)
          Moves an existing node to the start of the link list.
 void makeFirst(MemoryElementDescriptor me)
          Moves an existing node to the start of the link list.
 boolean remove(java.io.Serializable key)
          Removes an item from the cache.
 void removeAll()
          Remove all of the elements from both the Map and the linked list implementation.
private  void removeNode(MemoryElementDescriptor me)
          Removes the specified node from the link list.
 void update(ICacheElement ce)
          Puts an item to the cache.
private  void verifyCache()
           
private  void verifyCache(java.io.Serializable key)
           
 
Methods inherited from class org.apache.jcs.engine.memory.AbstractMemoryCache
dispose, getCacheAttributes, getCacheName, getCompositeCache, getGroupKeys, getSize, getStats, getStatus, setCacheAttributes, waterfal
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

private static final org.apache.commons.logging.Log log

first

private MemoryElementDescriptor first

last

private MemoryElementDescriptor last
Constructor Detail

LRUMemoryCache

public LRUMemoryCache()
Method Detail

initialize

public void initialize(CompositeCache hub)
For post reflection creation initialization

Specified by:
initialize in interface MemoryCache
Overrides:
initialize in class AbstractMemoryCache
Parameters:
hub -

update

public void update(ICacheElement ce)
            throws java.io.IOException
Puts an item to the cache.

Specified by:
update in interface MemoryCache
Specified by:
update in class AbstractMemoryCache
Parameters:
ce - Description of the Parameter
Throws:
java.io.IOException

removeAll

public void removeAll()
               throws java.io.IOException
Remove all of the elements from both the Map and the linked list implementation. Overrides base class.

Specified by:
removeAll in interface MemoryCache
Overrides:
removeAll in class AbstractMemoryCache
Throws:
java.io.IOException

getQuiet

public ICacheElement getQuiet(java.io.Serializable key)
                       throws java.io.IOException
Get an item from the cache without affecting its last access time or position.

Specified by:
getQuiet in interface MemoryCache
Specified by:
getQuiet in class AbstractMemoryCache
Parameters:
key - Identifies item to find
Returns:
Element mathinh key if found, or null
Throws:
java.io.IOException

get

public ICacheElement get(java.io.Serializable key)
                  throws java.io.IOException
Get an item from the cache

Specified by:
get in interface MemoryCache
Specified by:
get in class AbstractMemoryCache
Parameters:
key - Identifies item to find
Returns:
ICacheElement if found, else null
Throws:
java.io.IOException

remove

public boolean remove(java.io.Serializable key)
               throws java.io.IOException
Removes an item from the cache. This method handles hierarchical removal. If the key is a String and ends with the CacheConstants.NAME_COMPONENT_DELIMITER, then all items with keys starting with the argument String will be removed.

Specified by:
remove in interface MemoryCache
Specified by:
remove in class AbstractMemoryCache
Parameters:
key -
Returns:
Throws:
java.io.IOException

getIterator

public java.util.Iterator getIterator()
Gets the iterator attribute of the LRUMemoryCache object

Specified by:
getIterator in interface MemoryCache
Overrides:
getIterator in class AbstractMemoryCache
Returns:
The iterator value

getKeyArray

public java.lang.Object[] getKeyArray()
Get an Array of the keys for all elements in the memory cache

Specified by:
getKeyArray in interface MemoryCache
Specified by:
getKeyArray in class AbstractMemoryCache
Returns:
An Object[]

removeNode

private void removeNode(MemoryElementDescriptor me)
Removes the specified node from the link list.

Parameters:
me - Description of the Parameter

addLast

private void addLast(CacheElement ce)
Adds a new node to the end of the link list. Currently not used.

Parameters:
ce - The feature to be added to the Last

addFirst

private void addFirst(ICacheElement ce)
Adds a new node to the start of the link list.

Parameters:
ce - The feature to be added to the First

makeFirst

public void makeFirst(ICacheElement ce)
Moves an existing node to the start of the link list.

Parameters:
ce - Description of the Parameter

makeFirst

public void makeFirst(MemoryElementDescriptor me)
Moves an existing node to the start of the link list.

Parameters:
me - Description of the Parameter

dumpMap

public void dumpMap()
Dump the cache map for debugging.


dumpCacheEntries

public void dumpCacheEntries()
Dump the cache entries from first to list for debugging.


dumpCacheSize

private int dumpCacheSize()

verifyCache

private void verifyCache()

verifyCache

private void verifyCache(java.io.Serializable key)