|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||
java.lang.Objectjava.util.AbstractMap<K,V>
org.h2.dev.store.btree.CacheLIRS<K,V>
K - the key typeV - the value typepublic class CacheLIRS<K,V>
A scan resistant cache. It is meant to cache objects that are relatively costly to acquire, for example file content.
This implementation is not multi-threading save. Null keys or null values are not allowed. There is no guard against bad hash functions, so it is important to the hash function of the key is good. The map fill factor is at most 75%.
Each entry is assigned a distinct memory size, and the cache will try to use at most the specified amount of memory. The memory unit is not relevant, however it is suggested to use bytes as the unit.
This class implements the LIRS replacement algorithm invented by Xiaodong Zhang and Song Jiang as described in http://www.cse.ohio-state.edu/~zhang/lirs-sigmetrics-02.html with a few smaller changes: An additional queue for non-resident entries is used, to prevent unbound memory usage. The maximum size of this queue is at most the size of the rest of the stack. About 6.25% of the mapped entries are cold.
| Nested Class Summary |
|---|
| Nested classes/interfaces inherited from class java.util.AbstractMap |
|---|
java.util.AbstractMap.SimpleEntry<K,V>, java.util.AbstractMap.SimpleImmutableEntry<K,V> |
| Method Summary | ||
|---|---|---|
void |
clear()
Clear the cache. |
|
boolean |
containsKey(java.lang.Object key)
Check whether there is a resident entry for the given key. |
|
java.util.Set<java.util.Map.Entry<K,V>> |
entrySet()
Get the entry set for all resident entries. |
|
V |
get(java.lang.Object key)
Get the value for the given key if the entry is cached. |
|
int |
getAverageMemory()
Get the average memory used per entry. |
|
long |
getMaxMemory()
Get the maximum memory to use. |
|
int |
getMemory(K key)
Get the memory used for the given key. |
|
long |
getUsedMemory()
Get the currently used memory. |
|
java.util.List<K> |
keys(boolean cold,
boolean nonResident)
Get the list of keys. |
|
java.util.Set<K> |
keySet()
Get the set of keys for resident entries. |
|
static
|
newInstance(int maxMemory,
int averageMemory)
Create a new cache with the given memory size. |
|
V |
peek(K key)
Get the value for the given key if the entry is cached. |
|
V |
put(K key,
V value)
Add an entry to the cache using the average memory size. |
|
V |
put(K key,
V value,
int memory)
Add an entry to the cache. |
|
V |
remove(java.lang.Object key)
Remove an entry. |
|
void |
setAverageMemory(int averageMemory)
Set the average memory used per entry. |
|
void |
setMaxMemory(long maxMemory)
Set the maximum memory this cache should use. |
|
int |
size()
Get the number of resident entries. |
|
int |
sizeHot()
Get the number of hot entries in the cache. |
|
int |
sizeMapArray()
Get the length of the internal map array. |
|
int |
sizeNonResident()
Get the number of non-resident entries in the cache. |
|
| Methods inherited from class java.util.AbstractMap |
|---|
clone, containsValue, equals, hashCode, isEmpty, putAll, toString, values |
| Methods inherited from class java.lang.Object |
|---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface java.util.Map |
|---|
containsValue, equals, hashCode, isEmpty, putAll, values |
| Method Detail |
|---|
public static <K,V> CacheLIRS<K,V> newInstance(int maxMemory,
int averageMemory)
maxMemory - the maximum memory to use (1 or larger)averageMemory - the average memory (1 or larger)
public void clear()
clear in interface java.util.Map<K,V>clear in class java.util.AbstractMap<K,V>public V peek(K key)
key - the key (may not be null)
public int getMemory(K key)
key - the key (may not be null)
public V get(java.lang.Object key)
get in interface java.util.Map<K,V>get in class java.util.AbstractMap<K,V>key - the key (may not be null)
public V put(K key,
V value)
put in interface java.util.Map<K,V>put in class java.util.AbstractMap<K,V>key - the key (may not be null)value - the value (may not be null)
public V put(K key,
V value,
int memory)
key - the key (may not be null)value - the value (may not be null)memory - the memory used for the given entry
public V remove(java.lang.Object key)
remove in interface java.util.Map<K,V>remove in class java.util.AbstractMap<K,V>key - the key (may not be null)
public java.util.List<K> keys(boolean cold,
boolean nonResident)
cold - if true, only keys for the cold entries are returnednonResident - true for non-resident entries
public int size()
size in interface java.util.Map<K,V>size in class java.util.AbstractMap<K,V>public boolean containsKey(java.lang.Object key)
containsKey in interface java.util.Map<K,V>containsKey in class java.util.AbstractMap<K,V>key - the key (may not be null)
public java.util.Set<K> keySet()
keySet in interface java.util.Map<K,V>keySet in class java.util.AbstractMap<K,V>public java.util.Set<java.util.Map.Entry<K,V>> entrySet()
entrySet in interface java.util.Map<K,V>entrySet in class java.util.AbstractMap<K,V>public int sizeHot()
public int sizeNonResident()
public int sizeMapArray()
public long getUsedMemory()
public void setMaxMemory(long maxMemory)
maxMemory - the maximum size (1 or larger)public long getMaxMemory()
public void setAverageMemory(int averageMemory)
averageMemory - the average memory used (1 or larger)public int getAverageMemory()
|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||