|
Rakesh API | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.rakeshv.utils.DynamicCache<K,V>
class DynamicCache<K,V>
A Map used to implement a dynamic cache that grows
only up to the heap space available to the process. The map
values are stored as SoftReferences thus
ensuring that the least recently used values will be
garbage collected when heap space runs short.
This class uses a ConcurrentHashMap internally to
manage the cache.
Mappings for garbage collected values from the Map
will be removed when invoking the following methods:
In addition to the above, the DynamicCache.Cleaner task
will run at the interval specified for the
org.rakeshv.utils.DynamicCache.cleanInterval system
property (in seconds), or at 600 second intervals if
no property is specified. This will ensure that memory is not
wasted on holding mappings for garbage collected values, or for
maintaing the values in the ReferenceQueue.
Copyright 2004-2006 Rakesh Vidyadharan
| Nested Class Summary | |
|---|---|
private static class |
DynamicCache.Cleaner
A TimerTask that is used to schedule clearing of
mappings for garbage collected DynamicCache.Value objects. |
class |
DynamicCache.Entry<K,V>
An implementation of the Map.Entry interface. |
private class |
DynamicCache.Value<V>
A sub-class of SoftReference used to represent the
value stored in the map. |
| Nested classes/interfaces inherited from interface org.rakeshv.utils.Map |
|---|
Map.Statistics |
| Field Summary | |
|---|---|
(package private) static java.lang.String |
CLEAN_INTERVAL_PROPERTY
The name of the system property that defines the interval at which the DynamicCache.Cleaner will run. |
private static java.lang.String |
CLEAN_INTERVAL_VALUE
The default value for the CLEAN_INTERVAL_PROPERTY in
seconds. |
private static DynamicCache.Cleaner |
cleaner
The DynamicCache.Cleaner that is used to remove garbage collected
DynamicCache.Value instances from each instance of the cache. |
(package private) static int |
CONCURRENCY
Default concurrency level for the map. |
private static java.util.logging.Logger |
logger
The logger used to write information about cache activities. |
private java.util.concurrent.ConcurrentHashMap<K,DynamicCache.Value<V>> |
map
The instance of ConcurrentHashMap that is used to
hold the key-value entries. |
private java.lang.ref.ReferenceQueue<V> |
queue
The reference que for the garbage collected values. |
private LinkedHashMap.Statistics |
statistics
An instance of LinkedHashMap.Statistics that is used to
track usage of the cache. |
| Constructor Summary | |
|---|---|
DynamicCache()
Default constructor. |
|
DynamicCache(int capacity)
Constructs a new instance with the specified initial capacity. |
|
DynamicCache(int capacity,
float loadFactor)
Constructs a new instance with the specified initial capacity and load factor. |
|
DynamicCache(int capacity,
float loadFactor,
int concurrency)
Constructs an empty DynamicCache instance with the specified initial capacity, load factor and ordering mode. |
|
DynamicCache(java.util.Map<K,V> map)
Constructs an ordered DynamicCache instance with the same mappings as the specified map. |
|
| Method Summary | |
|---|---|
private int |
clean()
Clean out entries from the map whose value has been
garbage collected. |
void |
clear()
Removes all mappings from this map (optional operation). |
boolean |
containsKey(java.lang.Object key)
Returns true if this map contains a mapping for the specified key. |
boolean |
containsValue(java.lang.Object value)
Returns true if this map maps one or more keys to the specified value. |
java.util.Set<java.util.Map.Entry<K,V>> |
entrySet()
Returns a set view of the mappings contained in this map. |
boolean |
equals(java.lang.Object o)
Compares the specified object with this map for equality. |
V |
get(java.lang.Object key)
Returns the value to which this map maps the specified key. |
int |
getMaxEntries()
Returns the total number of entries in the cache. |
Map.Statistics |
getStatistics()
Returns statistics. |
int |
hashCode()
Returns the hash code value for this map. |
boolean |
isEmpty()
Returns true if this map contains no key-value mappings. |
java.util.Set<K> |
keySet()
Returns a set view of the keys contained in this map. |
V |
put(K key,
V value)
Associates the specified value with the specified key in this map. |
void |
putAll(java.util.Map<? extends K,? extends V> t)
Copies all of the mappings from the specified map to this map The effect of this call is equivalent to that of calling put(k, v) on this map once
for each mapping from key k to value v in the
specified map. |
V |
remove(java.lang.Object key)
Removes the mapping for this key from this map if it is present. |
void |
setMaxEntries(int maxEntries)
Set the maximum number of items that can be stored in the map. |
int |
size()
Returns the number of key-value mappings in this map. |
java.util.Collection<V> |
values()
Returns a collection view of the values contained in this map. |
| Methods inherited from class java.lang.Object |
|---|
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
static final int CONCURRENCY
static final java.lang.String CLEAN_INTERVAL_PROPERTY
DynamicCache.Cleaner will run.
private static final java.lang.String CLEAN_INTERVAL_VALUE
CLEAN_INTERVAL_PROPERTY in
seconds.
"600"
private static final java.util.logging.Logger logger
private static final DynamicCache.Cleaner cleaner
DynamicCache.Cleaner that is used to remove garbage collected
DynamicCache.Value instances from each instance of the cache.
private final java.util.concurrent.ConcurrentHashMap<K,DynamicCache.Value<V>> map
ConcurrentHashMap that is used to
hold the key-value entries.
private final java.lang.ref.ReferenceQueue<V> queue
private LinkedHashMap.Statistics statistics
LinkedHashMap.Statistics that is used to
track usage of the cache.
| Constructor Detail |
|---|
DynamicCache()
DynamicCache(int capacity)
capacity - The maximum size for this map.
DynamicCache(int capacity,
float loadFactor)
capacity - The maximum size for this map.loadFactor - The load-factor to use.
DynamicCache(int capacity,
float loadFactor,
int concurrency)
capacity - The maximum size for this map.loadFactor - The load-factor to use.concurrency - The estimated number of concurrently updating
threads. The implementation performs internal sizing to try to
accommodate this many threads.DynamicCache(java.util.Map<K,V> map)
map - The map to use to create the new instance.
java.lang.NullPointerException - If the specified map is null.putAll(java.util.Map extends K, ? extends V>)| Method Detail |
|---|
public final int getMaxEntries()
public final void setMaxEntries(int maxEntries)
maxEntries - The value to set.public final Map.Statistics getStatistics()
statistics. This may be used by client
applications to monitor cache usage.
public final int size()
size in interface java.util.Map<K,V>public final boolean isEmpty()
isEmpty in interface java.util.Map<K,V>public final boolean containsKey(java.lang.Object key)
containsKey in interface java.util.Map<K,V>key - Key whose presence in this map is to be tested.
java.lang.ClassCastException - If the key is of an inappropriate type
for this map (optional).
java.lang.NullPointerException - If the key is null and this
map does not permit null keys (optional).public final boolean containsValue(java.lang.Object value)
containsValue in interface java.util.Map<K,V>value - Value whose presence in this map is to be tested.
java.lang.ClassCastException - If the value is of an inappropriate
type for this map (optional).
java.lang.NullPointerException - If the value is null and
this map does not permit null values (optional).
java.lang.UnsupportedOperationException - This operation is not
supported by this map implementation.public final V get(java.lang.Object key)
More formally, if this map contains a mapping from a key k to a value v such that (key==null ? k==null : key.equals(k)), then this method returns v; otherwise it returns null. (There can be at most one such mapping.)
get in interface java.util.Map<K,V>key - Key whose associated value is to be returned.
java.lang.ClassCastException - If the key is of an inappropriate type
for this map (optional).
java.lang.NullPointerException - If the key is null and this
map does not permit null keys (optional).containsKey( Object )
public final V put(K key,
V value)
m.containsKey(k) would
return true.))
put in interface java.util.Map<K,V>key - Key with which the specified value is to be associated.value - Value to be associated with the specified key.
java.lang.UnsupportedOperationException - If the put
operation is not supported by this map.
java.lang.ClassCastException - If the class of the specified key or
value prevents it from being stored in this map.
java.lang.IllegalArgumentException - If some aspect of this key or
value prevents it from being stored in this map.
java.lang.NullPointerException - If this map does not permit
null keys or values, and the specified key or value is
null.clean()public final V remove(java.lang.Object key)
(key==null ? k==null : key.equals(k)), that mapping
is removed. (The map can contain at most one such mapping.)
Returns the value to which the map previously associated the key, or null if the map contained no mapping for this key. (A null return can also indicate that the map previously associated null with the specified key if the implementation supports null values.) The map will not contain a mapping for the specified key once the call returns.
remove in interface java.util.Map<K,V>key - Key whose mapping is to be removed from the map.
java.lang.ClassCastException - If the key is of an inappropriate type
for this map (optional).
java.lang.NullPointerException - If the key is null and this
map does not permit null keys (optional).
java.lang.UnsupportedOperationException - if the remove
method is not supported by this map.clean()public void putAll(java.util.Map<? extends K,? extends V> t)
put(k, v) on this map once
for each mapping from key k to value v in the
specified map. The behavior of this operation is unspecified if
the specified map is modified while the operation is in progress.
putAll in interface java.util.Map<K,V>t - Mappings to be stored in this map.
java.lang.UnsupportedOperationException - If the putAll
method is not supported by this map.
java.lang.ClassCastException - If the class of a key or value in the
specified map prevents it from being stored in this map.
java.lang.IllegalArgumentException - Some aspect of a key or value in
the specified map prevents it from being stored in this map.
java.lang.NullPointerException - If the specified map is null,
or if this map does not permit null keys or values, and
the specified map contains null keys or values.put(K, V)public void clear()
clear in interface java.util.Map<K,V>java.lang.UnsupportedOperationException - Clear is not supported by
this map.public java.util.Set<K> keySet()
keySet in interface java.util.Map<K,V>public java.util.Collection<V> values()
values in interface java.util.Map<K,V>public java.util.Set<java.util.Map.Entry<K,V>> entrySet()
Map.Entry. The set
is backed by the map, so changes to the map are reflected in the
set, and vice-versa. If the map is modified while an iteration
over the set is in progress (except through the iterator's own
remove operation, or through
the setValue operation on a map entry returned by the
iterator) the results of the iteration are undefined. The set
supports element removal, which removes the corresponding mapping
from the map, via the
Iterator.remove, Set.remove, removeAll,
retainAll and clear operations. It does not
support the add or addAll operations.
entrySet in interface java.util.Map<K,V>public boolean equals(java.lang.Object o)
equals in interface java.util.Map<K,V>equals in class java.lang.Objecto - Object to be compared for equality with this map.
public int hashCode()
hashCode in interface java.util.Map<K,V>hashCode in class java.lang.Objectequals(java.lang.Object)private int clean()
value has been
garbage collected. The garbage collected values are available
in the queue reference queue.
map.
|
Rakesh API | |||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||