public abstract class BiLevelCacheMap
extends java.lang.Object
implements java.util.Map
remove() is very expensive.
Access to L1 map is not sychronized, to L2 map is synchronized. New values are first stored in L2. Once there have been more that a specified mumber of misses on L1, L1 and L2 maps are merged and the new map assigned to L1 and L2 cleared.
IMPORTANT:entrySet(), keySet(), and values() return unmodifiable snapshot collections.
| Modifier and Type | Field and Description |
|---|---|
protected java.util.Map |
_cacheL1
To preinitialize
_cacheL1 with default values use an initialization block |
| Constructor and Description |
|---|
BiLevelCacheMap(int mergeThreshold) |
| Modifier and Type | Method and Description |
|---|---|
void |
clear() |
boolean |
containsKey(java.lang.Object key) |
boolean |
containsValue(java.lang.Object value) |
java.util.Set |
entrySet() |
java.lang.Object |
get(java.lang.Object key) |
boolean |
isEmpty() |
java.util.Set |
keySet() |
protected abstract java.lang.Object |
newInstance(java.lang.Object key)
Subclasses must implement to have automatic creation of new instances
or alternatively can use
put |
java.lang.Object |
put(java.lang.Object key,
java.lang.Object value)
If key is already in cacheL1, the new value will show with a delay,
since merge L2->L1 may not happen immediately.
|
void |
putAll(java.util.Map map) |
java.lang.Object |
remove(java.lang.Object key)
This operation is very expensive.
|
int |
size() |
java.util.Collection |
values() |
protected java.util.Map _cacheL1
_cacheL1 with default values use an initialization blockpublic boolean isEmpty()
isEmpty in interface java.util.Mappublic void clear()
clear in interface java.util.Mappublic boolean containsKey(java.lang.Object key)
containsKey in interface java.util.Mappublic boolean containsValue(java.lang.Object value)
containsValue in interface java.util.Mappublic java.util.Set entrySet()
entrySet in interface java.util.Mappublic java.lang.Object get(java.lang.Object key)
get in interface java.util.Mappublic java.util.Set keySet()
keySet in interface java.util.Mappublic java.lang.Object put(java.lang.Object key,
java.lang.Object value)
size().put in interface java.util.Mappublic void putAll(java.util.Map map)
putAll in interface java.util.Mappublic java.lang.Object remove(java.lang.Object key)
remove in interface java.util.Mappublic int size()
size in interface java.util.Mappublic java.util.Collection values()
values in interface java.util.Mapprotected abstract java.lang.Object newInstance(java.lang.Object key)
put to add new items to the cache.
Implementing this method is prefered to guarantee that there will be only
one instance per key ever created. Calling put() to add items in a multi-
threaded situation will require external synchronization to prevent two
instances for the same key, which defeats the purpose of this cache
(put() is useful when initialization is done during startup and items
are not added during execution or when (temporarily) having possibly two
or more instances of the same key is not of concern).
key - lookup key