|
||||||||||
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.
It is 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 | |
---|---|
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. |
Fields inherited from interface org.zkoss.util.Cache |
---|
DEFAULT_LIFETIME, DEFAULT_MAX_SIZE |
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. |
|
CacheMap(int maxSize,
int lifetime)
Constructs a cache map with the specified max size and lifetime. |
Method Summary | |
---|---|
protected int |
canExpunge(CacheMap.Value v)
Tests whether certain value is OK to expunge. |
void |
clear()
Clears all objects being cached. |
java.lang.Object |
clone()
To make sure that it is in the acess order. |
boolean |
containsKey(java.lang.Object key)
Returns whether the specified key is stored. |
boolean |
containsValue(java.lang.Object value)
|
java.util.Set |
entrySet()
|
boolean |
equals(java.lang.Object o)
|
int |
expunge()
Enforces to expunge items that exceeds the maximal allowed number or lifetime. |
java.lang.Object |
get(java.lang.Object key)
Returns the object of the specified key, or null if not found. |
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. |
boolean |
isEmptyWithoutExpunge()
Returns whether it is empty without trying to expunge first. |
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)
Stores an object to the cache. |
void |
putAll(java.util.Map map)
|
java.lang.Object |
remove(java.lang.Object key)
Removes an object from the cache. |
void |
setLifetime(int lifetime)
Sets the minimal lifetime. |
void |
setMaxSize(int maxsize)
Sets the maximal allowed size. |
protected boolean |
shallExpunge()
Returns whether it is time to expunge. |
int |
size()
|
int |
sizeWithoutExpunge()
Returns the size without trying to expunge first. |
java.lang.String |
toString()
|
java.util.Collection |
values()
|
Methods inherited from class java.lang.Object |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
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(int maxSize, int lifetime)
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()
public int expunge()
By default, this method is called only GC takes places.
size()
) after expungedprotected 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()
getLifetime
in interface Cache
getMaxSize()
public void setLifetime(int lifetime)
Cache.DEFAULT_LIFETIME
.
setLifetime
in interface Cache
lifetime
- the lifetime, unit=milliseconds;
if non-posive, they will be removed immediately.getLifetime()
public int getMaxSize()
Cache.DEFAULT_MAX_SIZE
.
An mapping won't be removed by GC unless the minimal lifetime
or the maximal allowed size exceeds.
getMaxSize
in interface Cache
getLifetime()
public void setMaxSize(int maxsize)
setMaxSize
in interface Cache
getMaxSize()
public boolean isEmpty()
isEmpty
in interface java.util.Map
public boolean isEmptyWithoutExpunge()
public int size()
size
in interface java.util.Map
public int sizeWithoutExpunge()
public void clear()
Cache
clear
in interface java.util.Map
clear
in interface Cache
public java.lang.Object remove(java.lang.Object key)
Cache
remove
in interface java.util.Map
remove
in interface Cache
public java.lang.Object get(java.lang.Object key)
Cache
get
in interface java.util.Map
get
in interface Cache
public java.lang.Object getWithoutExpunge(java.lang.Object key)
public boolean containsKey(java.lang.Object key)
Cache
containsKey
in interface java.util.Map
containsKey
in interface Cache
public 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)
Cache
put
in interface java.util.Map
put
in interface Cache
public void putAll(java.util.Map map)
putAll
in interface java.util.Map
public java.util.Set entrySet()
entrySet
in interface java.util.Map
public java.util.Set keySet()
keySet
in interface java.util.Map
public java.util.Collection values()
values
in interface java.util.Map
public int hashCode()
hashCode
in interface java.util.Map
hashCode
in class java.lang.Object
public boolean equals(java.lang.Object o)
equals
in interface java.util.Map
equals
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object
public 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 |