Package org.apache.solr.util
Class ConcurrentLRUCache<K,V>
- java.lang.Object
-
- org.apache.solr.util.ConcurrentLRUCache<K,V>
-
- All Implemented Interfaces:
org.apache.lucene.util.Accountable
,Cache<K,V>
public class ConcurrentLRUCache<K,V> extends Object implements Cache<K,V>, org.apache.lucene.util.Accountable
A LRU cache implementation based upon ConcurrentHashMap and other techniques to reduce contention and synchronization overhead to utilize multiple CPU cores more effectively.Note that the implementation does not follow a true LRU (least-recently-used) eviction strategy. Instead it strives to remove least recently used items but when the initial cleanup does not remove enough items to reach the 'acceptableWaterMark' limit, it can remove more items forcefully regardless of access order.
- Since:
- solr 1.4
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ConcurrentLRUCache.CacheEntry<K,V>
static interface
ConcurrentLRUCache.EvictionListener<K,V>
static class
ConcurrentLRUCache.Stats
-
Constructor Summary
Constructors Constructor Description ConcurrentLRUCache(int size, int lowerWatermark)
ConcurrentLRUCache(int upperWaterMark, int lowerWaterMark, int acceptableWatermark, int initialSize, boolean runCleanupThread, boolean runNewThreadForCleanup, ConcurrentLRUCache.EvictionListener<K,V> evictionListener)
ConcurrentLRUCache(long ramLowerWatermark, long ramUpperWatermark, boolean runCleanupThread, ConcurrentLRUCache.EvictionListener<K,V> evictionListener)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear()
void
destroy()
protected void
finalize()
V
get(K key)
Collection<org.apache.lucene.util.Accountable>
getChildResources()
Map<K,V>
getLatestAccessedItems(int n)
Map<Object,ConcurrentLRUCache.CacheEntry<K,V>>
getMap()
Map<K,V>
getOldestAccessedItems(int n)
Returns 'n' number of oldest accessed entries present in this cache.ConcurrentLRUCache.Stats
getStats()
V
put(K key, V val)
long
ramBytesUsed()
V
remove(K key)
void
setAlive(boolean live)
int
size()
-
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.solr.common.util.Cache
computeIfAbsent
-
-
-
-
Constructor Detail
-
ConcurrentLRUCache
public ConcurrentLRUCache(long ramLowerWatermark, long ramUpperWatermark, boolean runCleanupThread, ConcurrentLRUCache.EvictionListener<K,V> evictionListener)
-
ConcurrentLRUCache
public ConcurrentLRUCache(int upperWaterMark, int lowerWaterMark, int acceptableWatermark, int initialSize, boolean runCleanupThread, boolean runNewThreadForCleanup, ConcurrentLRUCache.EvictionListener<K,V> evictionListener)
-
ConcurrentLRUCache
public ConcurrentLRUCache(int size, int lowerWatermark)
-
-
Method Detail
-
setAlive
public void setAlive(boolean live)
-
getOldestAccessedItems
public Map<K,V> getOldestAccessedItems(int n)
Returns 'n' number of oldest accessed entries present in this cache. This uses a TreeSet to collect the 'n' oldest items ordered by ascending last access time and returns a LinkedHashMap containing 'n' or less than 'n' entries.- Parameters:
n
- the number of oldest items needed- Returns:
- a LinkedHashMap containing 'n' or less than 'n' entries
-
size
public int size()
-
getMap
public Map<Object,ConcurrentLRUCache.CacheEntry<K,V>> getMap()
-
destroy
public void destroy()
-
getStats
public ConcurrentLRUCache.Stats getStats()
-
finalize
protected void finalize() throws Throwable
-
ramBytesUsed
public long ramBytesUsed()
- Specified by:
ramBytesUsed
in interfaceorg.apache.lucene.util.Accountable
-
getChildResources
public Collection<org.apache.lucene.util.Accountable> getChildResources()
- Specified by:
getChildResources
in interfaceorg.apache.lucene.util.Accountable
-
-