Class WeakHashLRUImpl<K>
- java.lang.Object
-
- org.glassfish.hk2.utilities.general.internal.WeakHashLRUImpl<K>
-
- All Implemented Interfaces:
WeakHashLRU<K>
public class WeakHashLRUImpl<K> extends java.lang.Object implements WeakHashLRU<K>
An implementation of the WeakHashLRU as needed by the CAR algorithm
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.WeakHashMap<K,DoubleNode<K,java.lang.Object>>byKeyprivate java.util.concurrent.ConcurrentHashMap<K,DoubleNode<K,java.lang.Object>>byKeyNotWeakprivate booleanisWeakprivate DoubleNode<K,java.lang.Object>lruprivate DoubleNode<K,java.lang.Object>mruprivate java.lang.ref.ReferenceQueue<? super K>myQueueprivate static java.lang.ObjectVALUE
-
Constructor Summary
Constructors Constructor Description WeakHashLRUImpl(boolean isWeak)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(K key)Adds the given key to the LRU.private DoubleNode<K,java.lang.Object>addToHead(K key)voidclear()Removes all entries from this LRUprivate voidclearStale()voidclearStaleReferences()Causes stale references to be cleared from the data structures.booleancontains(K key)Tells if the given key is in the LRUvoidreleaseMatching(CacheKeyFilter<K> filter)Releases all keys that match the filterKremove()Removes the key that was Least Recently Usedbooleanremove(K key)Removes the given key from the LRU, if foundprivate Kremove(DoubleNode<K,java.lang.Object> removeMe)private booleanremoveNoClear(K key)intsize()Returns the number of elements currently in the clock.java.lang.StringtoString()
-
-
-
Field Detail
-
VALUE
private static final java.lang.Object VALUE
-
isWeak
private final boolean isWeak
-
byKey
private final java.util.WeakHashMap<K,DoubleNode<K,java.lang.Object>> byKey
-
byKeyNotWeak
private final java.util.concurrent.ConcurrentHashMap<K,DoubleNode<K,java.lang.Object>> byKeyNotWeak
-
myQueue
private final java.lang.ref.ReferenceQueue<? super K> myQueue
-
mru
private DoubleNode<K,java.lang.Object> mru
-
lru
private DoubleNode<K,java.lang.Object> lru
-
-
Method Detail
-
addToHead
private DoubleNode<K,java.lang.Object> addToHead(K key)
-
remove
private K remove(DoubleNode<K,java.lang.Object> removeMe)
-
add
public void add(K key)
Description copied from interface:WeakHashLRUAdds the given key to the LRU. It will be placed at the MRU of the LRU. If this key already exists in the LRU it will be moved to the MRU- Specified by:
addin interfaceWeakHashLRU<K>- Parameters:
key- Must not be null
-
contains
public boolean contains(K key)
Description copied from interface:WeakHashLRUTells if the given key is in the LRU- Specified by:
containsin interfaceWeakHashLRU<K>- Parameters:
key- The key to search for, may not be null- Returns:
- true if found, false otherwise
-
remove
public boolean remove(K key)
Description copied from interface:WeakHashLRURemoves the given key from the LRU, if found- Specified by:
removein interfaceWeakHashLRU<K>- Parameters:
key- The key to remove, may not be null- Returns:
- true if removed, false otherwise
-
removeNoClear
private boolean removeNoClear(K key)
-
size
public int size()
Description copied from interface:WeakHashLRUReturns the number of elements currently in the clock. References that have gone away because they were weakly referenced will not be counted in the size- Specified by:
sizein interfaceWeakHashLRU<K>- Returns:
- The number of entries currently in the LRU
-
remove
public K remove()
Description copied from interface:WeakHashLRURemoves the key that was Least Recently Used- Specified by:
removein interfaceWeakHashLRU<K>- Returns:
- The key that was removed, or null if the list is empty
-
releaseMatching
public void releaseMatching(CacheKeyFilter<K> filter)
Description copied from interface:WeakHashLRUReleases all keys that match the filter- Specified by:
releaseMatchingin interfaceWeakHashLRU<K>- Parameters:
filter- A non-null filter that can be used to delete every key that matches the filter
-
clear
public void clear()
Description copied from interface:WeakHashLRURemoves all entries from this LRU- Specified by:
clearin interfaceWeakHashLRU<K>
-
clearStaleReferences
public void clearStaleReferences()
Description copied from interface:WeakHashLRUCauses stale references to be cleared from the data structures. Since this is a weak clock the references can go away at any time, which happens whenever any operation has been performed. However, it may be the case that no operation will be performed for a while and so this method is provided to have a no-op operation to call in order to clear out any stale references- Specified by:
clearStaleReferencesin interfaceWeakHashLRU<K>
-
clearStale
private void clearStale()
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-