org.exist.storage.cache
Class LRUCache

java.lang.Object
  extended by org.exist.storage.cache.LRUCache
All Implemented Interfaces:
Cache
Direct Known Subclasses:
CollectionCache

public class LRUCache
extends Object
implements Cache

A simple cache implementing a Last Recently Used policy. This cache implementation is based on a SequencedLongHashMap. Contrary to the other Cache implementations, LRUCache ignores reference counts or timestamps.

Author:
wolf

Field Summary
 
Fields inherited from interface org.exist.storage.cache.Cache
LOG
 
Constructor Summary
LRUCache(int size, double growthFactor, double growthThreshold, String type)
           
 
Method Summary
 void add(Cacheable item)
          Add the item to the cache.
 void add(Cacheable item, int initialRefCount)
          Add the item to the cache.
 boolean flush()
          Call release on all items, but without actually removing them from the cache.
 Cacheable get(Cacheable item)
          Retrieve an item from the cache.
 Cacheable get(long key)
          Retrieve an item by its key.
 int getBuffers()
          Get the size of this cache.
 int getFails()
          Get the number of times where an object could not be found in the cache.
 String getFileName()
           
 SequencedLongHashMap.Entry getFirst()
           
 double getGrowthFactor()
          Returns the factor by which the cache should grow if it can be resized.
 int getHits()
          Get the number of times where an object has been successfully loaded from the cache.
 int getLoad()
           
 int getThrashing()
           
 String getType()
          Returns the type of this cache.
 int getUsedBuffers()
          Get the number of buffers currently used.
 boolean hasDirtyItems()
          Returns true if the cache contains any dirty items that need to be written to disk.
 void remove(Cacheable item)
          Remove an item from the cache.
 void resize(int newSize)
          Resize the cache.
 void setCacheManager(CacheManager manager)
          Set the CacheManager object that controls this cache.
 void setFileName(String fileName)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

LRUCache

public LRUCache(int size,
                double growthFactor,
                double growthThreshold,
                String type)
Method Detail

add

public void add(Cacheable item,
                int initialRefCount)
Description copied from interface: Cache
Add the item to the cache. If it is already in the cache, update the references.

Specified by:
add in interface Cache
initialRefCount - the initial reference count for the item

getType

public String getType()
Description copied from interface: Cache
Returns the type of this cache. Should be one of the constants defined in CacheManager.

Specified by:
getType in interface Cache
Returns:
the type of this cache

add

public void add(Cacheable item)
Description copied from interface: Cache
Add the item to the cache. If it is already in the cache, update the references.

Specified by:
add in interface Cache

get

public Cacheable get(Cacheable item)
Description copied from interface: Cache
Retrieve an item from the cache.

Specified by:
get in interface Cache
Returns:
the item in the cache or null if it does not exist.

get

public Cacheable get(long key)
Description copied from interface: Cache
Retrieve an item by its key.

Specified by:
get in interface Cache
Parameters:
key - a unique key, usually the page number
Returns:
the item in the cache or null if it does not exist.

remove

public void remove(Cacheable item)
Description copied from interface: Cache
Remove an item from the cache.

Specified by:
remove in interface Cache

flush

public boolean flush()
Description copied from interface: Cache
Call release on all items, but without actually removing them from the cache. This gives the items a chance to write all unwritten data to disk.

Specified by:
flush in interface Cache

hasDirtyItems

public boolean hasDirtyItems()
Description copied from interface: Cache
Returns true if the cache contains any dirty items that need to be written to disk.

Specified by:
hasDirtyItems in interface Cache

getBuffers

public int getBuffers()
Description copied from interface: Cache
Get the size of this cache.

Specified by:
getBuffers in interface Cache
Returns:
size

getUsedBuffers

public int getUsedBuffers()
Description copied from interface: Cache
Get the number of buffers currently used.

Specified by:
getUsedBuffers in interface Cache

getHits

public int getHits()
Description copied from interface: Cache
Get the number of times where an object has been successfully loaded from the cache.

Specified by:
getHits in interface Cache

getFails

public int getFails()
Description copied from interface: Cache
Get the number of times where an object could not be found in the cache.

Specified by:
getFails in interface Cache
Returns:
number of times where an object could not be found in the cache

getThrashing

public int getThrashing()

setFileName

public void setFileName(String fileName)
Specified by:
setFileName in interface Cache

getFileName

public String getFileName()
Specified by:
getFileName in interface Cache

getFirst

public SequencedLongHashMap.Entry getFirst()

getGrowthFactor

public double getGrowthFactor()
Description copied from interface: Cache
Returns the factor by which the cache should grow if it can be resized. The returned factor f will be between 0 and 2. A value smaller or equal to 1 means the cache can't grow, 1.5 means it grows by 50 percent. A cache with growth factor <= 1.0 can also not be shrinked. A cache is resized by the DefaultCacheManager.

Specified by:
getGrowthFactor in interface Cache
Returns:
growth factor

setCacheManager

public void setCacheManager(CacheManager manager)
Description copied from interface: Cache
Set the CacheManager object that controls this cache.

Specified by:
setCacheManager in interface Cache

resize

public void resize(int newSize)
Description copied from interface: Cache
Resize the cache. This method is called by the DefaultCacheManager. The newSize parameter can either be larger or smaller than the current cache size.

Specified by:
resize in interface Cache
Parameters:
newSize - the new size of the cache.

getLoad

public int getLoad()
Specified by:
getLoad in interface Cache


Copyright (C) Wolfgang Meier. All rights reserved.