|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.zkoss.util.CacheMap
public class CacheMap
The cache map. The key-to-value mappings hold in this map is temporary. They are removed when GC demanding memory and a criteria is met. The criteria is whether the mapping is old enough (called lifetime), or the upper bound is hit (called max-size).
The criteria can be changed by overriding canExpunge(org.zkoss.util.CacheMap.Value).
When to check the criteria can be changed by overriding
shallExpunge().
If the criteria is totally independent of GC, you could override
newQueue() to return null. Then, shallExpunge()
always returns true (rather than when GC is activated) -- of course,
you could override shallExpunge(), too.
The constructor doesn't provide parameter to set the lifetime
or maxsize. However, setLifetime(int) and setMaxSize(int)
return the map, so you can do:
Map map = new CacheMap().setLifetime(10000);
It is very different from WeakHashMap:
Like other maps, it is not thread-safe. To get one, use java.util.Collections.synchronizedMap.
Implementation Note: there is another version of CacheMap that uses WeakReference for each value (refer to obsolete). The drawback is that all mapping will be queued and need to be examined, because GC tends to release all reference at once.
We don't use PhantomReference because it is still required to re-create the reference after enqueued.
| Nested Class Summary | |
|---|---|
protected static class |
CacheMap.Value
The class to hold key/value. |
| Field Summary | |
|---|---|
static int |
DEFAULT_LIFETIME
The default minimal lifetime, unit=milliseconds. |
static int |
DEFAULT_MAXSIZE
The default maximal allowed size. |
protected static int |
EXPUNGE_CONTINUE
Returns by canExpunge(org.zkoss.util.CacheMap.Value) to denote the searching of the
next mapping shall continue. |
protected static int |
EXPUNGE_NO
Returns by canExpunge(org.zkoss.util.CacheMap.Value) to denote it shall not be expunged. |
protected static int |
EXPUNGE_STOP
Returns by canExpunge(org.zkoss.util.CacheMap.Value) to denote the searching of the
next mapping shall stop. |
protected static int |
EXPUNGE_YES
Returns by canExpunge(org.zkoss.util.CacheMap.Value) to denote it shall be expunged. |
| Constructor Summary | |
|---|---|
CacheMap()
Constructs a cachemap by using LinkedHashMap internally. |
|
CacheMap(int cap)
Constructs a cachemap by using LinkedHashMap internally. |
|
CacheMap(int cap,
float load)
Constructs a cachemap by using LinkedHashMap internally. |
|
| Method Summary | |
|---|---|
protected int |
canExpunge(CacheMap.Value v)
Tests whether certain value is OK to expunge. |
void |
clear()
|
java.lang.Object |
clone()
To make sure that it is in the acess order. |
boolean |
containsKey(java.lang.Object key)
|
boolean |
containsValue(java.lang.Object value)
|
java.util.Set |
entrySet()
|
boolean |
equals(java.lang.Object o)
|
java.lang.Object |
get(java.lang.Object key)
|
int |
getLifetime()
Gets the minimal lifetime, unit=milliseconds. |
int |
getMaxSize()
Gets the maximal allowed size. |
java.lang.Object |
getWithoutExpunge(java.lang.Object key)
Returns the value without trying to expunge first. |
int |
hashCode()
|
boolean |
isEmpty()
Gets the last accessed time, in system millisecs. |
java.util.Set |
keySet()
|
protected java.lang.ref.ReferenceQueue |
newQueue()
Creates the reference queue. |
protected void |
onExpunge(CacheMap.Value v)
Called when a pair of key and value having been expunged. |
java.lang.Object |
put(java.lang.Object key,
java.lang.Object value)
|
void |
putAll(java.util.Map map)
|
java.lang.Object |
remove(java.lang.Object key)
|
CacheMap |
setLifetime(int lifetime)
Sets the minimal lifetime. |
CacheMap |
setMaxSize(int maxsize)
Sets the maximal allowed size. |
protected boolean |
shallExpunge()
Returns whether it is time to expunge. |
int |
size()
|
java.lang.String |
toString()
|
java.util.Collection |
values()
|
| Methods inherited from class java.lang.Object |
|---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
public static final int DEFAULT_LIFETIME
public static final int DEFAULT_MAXSIZE
protected static final int EXPUNGE_NO
canExpunge(org.zkoss.util.CacheMap.Value) to denote it shall not be expunged.
protected static final int EXPUNGE_YES
canExpunge(org.zkoss.util.CacheMap.Value) to denote it shall be expunged.
protected static final int EXPUNGE_CONTINUE
canExpunge(org.zkoss.util.CacheMap.Value) to denote the searching of the
next mapping shall continue.
protected static final int EXPUNGE_STOP
canExpunge(org.zkoss.util.CacheMap.Value) to denote the searching of the
next mapping shall stop.
| Constructor Detail |
|---|
public CacheMap()
public CacheMap(int cap)
public CacheMap(int cap,
float load)
| Method Detail |
|---|
protected void onExpunge(CacheMap.Value v)
Default: does nothing
protected boolean shallExpunge()
canExpunge(org.zkoss.util.CacheMap.Value), and expunged if EXPUNGE_YES.
This implementation returns true only if newQueue()
returns null (in constructor) or GC was activated.
You might override it to enforce expunge besides GC.
canExpunge(org.zkoss.util.CacheMap.Value)protected int canExpunge(CacheMap.Value v)
Note: values are tested thru canExpunge(org.zkoss.util.CacheMap.Value) only if
shallExpunge() returns true.
Deriving classes might override this method to return different value for different criteria.
The return value coulde be a combination of EXPUNGE_xxx. One of EXPUNGE_YES and EXPUNGE_NO is returned to denote whether to expunge the mapping. One of EXPUNGE_CONTINUE and EXPUNGE_STOP is returned to denote whether to continue the searching of the next mapping for expunging.
Normally, you return either (EXPUNGE_YES|EXPUNGE_CONTINUE) or (EXPUNG_NO|EXPUNGE_STOP). Notice that the mapping is queried in the last-access order. Thus, you rarely needs to return (EXPUNGE_NO|EXPUNGE_CONTINUE) unless the appropriate one might be out of this order.
This implementation compares the access time and size. It returns (EXPUNGE_YES|EXPUNGE_CONTINUE) if OK, and (EXPUNGE_NO|EXPUNGE_STOP) if not.
shallExpunge()protected java.lang.ref.ReferenceQueue newQueue()
Default: new ReferenceQueue();
Override this method to return null if you want to expunge items
every time get(java.lang.Object) or put(java.lang.Object, java.lang.Object) is called -- not only GC
is activated.
In other words, if newQueue() returns null, shallExpunge()
always returns true (unless you override it too).
public int getLifetime()
getMaxSize()public CacheMap setLifetime(int lifetime)
DEFAULT_LIFETIME.
lifetime - the lifetime, unit=milliseconds;
if non-posive, they will be removed immediately.getLifetime()public int getMaxSize()
DEFAULT_MAXSIZE.
An mapping won't be removed by GC unless the minimal lifetime
or the maximal allowed size exceeds.
getLifetime()public CacheMap setMaxSize(int maxsize)
getMaxSize()public boolean isEmpty()
isEmpty in interface java.util.Mappublic int size()
size in interface java.util.Mappublic void clear()
clear in interface java.util.Mappublic java.lang.Object remove(java.lang.Object key)
remove in interface java.util.Mappublic java.lang.Object get(java.lang.Object key)
get in interface java.util.Mappublic java.lang.Object getWithoutExpunge(java.lang.Object key)
public boolean containsKey(java.lang.Object key)
containsKey in interface java.util.Mappublic boolean containsValue(java.lang.Object value)
containsValue in interface java.util.Map
public java.lang.Object put(java.lang.Object key,
java.lang.Object value)
put in interface java.util.Mappublic void putAll(java.util.Map map)
putAll in interface java.util.Mappublic java.util.Set entrySet()
entrySet in interface java.util.Mappublic java.util.Set keySet()
keySet in interface java.util.Mappublic java.util.Collection values()
values in interface java.util.Mappublic int hashCode()
hashCode in interface java.util.MaphashCode in class java.lang.Objectpublic boolean equals(java.lang.Object o)
equals in interface java.util.Mapequals in class java.lang.Objectpublic java.lang.String toString()
toString in class java.lang.Objectpublic java.lang.Object clone()
clone in class java.lang.Object
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||