org.exist.storage.cache
Class GClockCache

java.lang.Object
  extended byorg.exist.storage.cache.GClockCache
All Implemented Interfaces:
Cache
Direct Known Subclasses:
LRDCache

public class GClockCache
extends java.lang.Object
implements Cache

Cache implementation based on the GClock algorithm. Implements a mixture between LFU (Last Frequently Used) and LRU (Last Recently Used) replacement policies. The class uses reference counts to track references to cached objects. Each call to the add method increments the reference count of the object. If the cache is full, the object to be removed is determined by decrementing the reference count for each object until an object with reference count = 0 is found. The implementation tends to replace younger objects first.

Author:
wolf

Field Summary
 
Fields inherited from interface org.exist.storage.cache.Cache
LOG
 
Constructor Summary
GClockCache(int size, double growthFactor, double growthThreshold)
           
 
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.
 java.lang.String getFileName()
           
 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()
           
 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(java.lang.String name)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

GClockCache

public GClockCache(int size,
                   double growthFactor,
                   double growthThreshold)
Method Detail

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
Parameters:
item -

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
Parameters:
item -
initialRefCount - the initial reference count for the item

get

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

Specified by:
get in interface Cache
Parameters:
item -
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
Parameters:
item -

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

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 CacheManager.

Specified by:
getGrowthFactor in interface Cache
Returns:
growth factor

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()

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
Parameters:
manager -

resize

public void resize(int newSize)
Description copied from interface: Cache
Resize the cache. This method is called by the CacheManager. 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

setFileName

public void setFileName(java.lang.String name)
Specified by:
setFileName in interface Cache

getFileName

public java.lang.String getFileName()
Specified by:
getFileName in interface Cache


Copyright (C) Wolfgang Meier. All rights reserved.