public class SelectableConcurrentHashMap
extends java.lang.Object
The random sampling technique involves randomly selecting a map Segment, and then selecting a number of random entry chains from that segment.
Modifier and Type | Class and Description |
---|---|
protected static class |
SelectableConcurrentHashMap.DummyPinnedKey |
protected static class |
SelectableConcurrentHashMap.DummyPinnedValue |
(package private) class |
SelectableConcurrentHashMap.EntryIterator |
(package private) class |
SelectableConcurrentHashMap.EntrySet |
static class |
SelectableConcurrentHashMap.HashEntry |
(package private) class |
SelectableConcurrentHashMap.HashEntryIterator |
(package private) class |
SelectableConcurrentHashMap.HashIterator |
(package private) class |
SelectableConcurrentHashMap.KeyIterator |
(package private) class |
SelectableConcurrentHashMap.KeySet |
private class |
SelectableConcurrentHashMap.PinnedKeyIterator |
private class |
SelectableConcurrentHashMap.PinnedKeySet |
class |
SelectableConcurrentHashMap.Segment |
(package private) static class |
SelectableConcurrentHashMap.SegmentIterator |
(package private) class |
SelectableConcurrentHashMap.ValueIterator |
(package private) class |
SelectableConcurrentHashMap.Values |
Modifier and Type | Field and Description |
---|---|
private RegisteredEventListeners |
cacheEventNotificationService |
(package private) static int |
DEFAULT_INITIAL_CAPACITY
The default initial capacity for this table,
used when not otherwise specified in a constructor.
|
(package private) static float |
DEFAULT_LOAD_FACTOR
The default load factor for this table, used when not
otherwise specified in a constructor.
|
protected static Element |
DUMMY_PINNED_ELEMENT |
private boolean |
elementPinningEnabled |
private java.util.Set<java.util.Map.Entry<java.lang.Object,Element>> |
entrySet |
private java.util.Set<java.lang.Object> |
keySet |
private static int |
MAX_SEGMENTS
The maximum number of segments to allow; used to bound
constructor arguments.
|
private static int |
MAXIMUM_CAPACITY
The maximum capacity, used if a higher value is implicitly
specified by either of the constructors with arguments.
|
private long |
maxSize |
private SelectableConcurrentHashMap.PinnedKeySet |
pinnedKeySet |
private PoolAccessor |
poolAccessor |
private static int |
RETRIES_BEFORE_LOCK
Number of unsynchronized retries in size and containsValue
methods before resorting to locking.
|
private java.util.Random |
rndm |
private int |
segmentMask
Mask value for indexing into segments.
|
private SelectableConcurrentHashMap.Segment[] |
segments
The segments, each of which is a specialized hash table
|
private int |
segmentShift
Shift value for indexing within segments.
|
private java.util.Collection<Element> |
values |
Constructor and Description |
---|
SelectableConcurrentHashMap(PoolAccessor poolAccessor,
boolean elementPinningEnabled,
int initialCapacity,
float loadFactor,
int concurrency,
long maximumSize,
RegisteredEventListeners cacheEventNotificationService) |
SelectableConcurrentHashMap(PoolAccessor poolAccessor,
boolean elementPinningEnabled,
int concurrency,
long maximumSize,
RegisteredEventListeners cacheEventNotificationService) |
Modifier and Type | Method and Description |
---|---|
void |
clear() |
boolean |
containsKey(java.lang.Object key) |
boolean |
containsValue(java.lang.Object value) |
protected SelectableConcurrentHashMap.Segment |
createSegment(int initialCapacity,
float lf) |
java.util.Set<java.util.Map.Entry<java.lang.Object,Element>> |
entrySet() |
boolean |
evict() |
Element |
get(java.lang.Object key) |
private SelectableConcurrentHashMap.Segment |
getRandomSegment() |
Element[] |
getRandomValues(int size,
java.lang.Object keyHint) |
protected static int |
hash(int h) |
boolean |
isEmpty() |
boolean |
isPinned(java.lang.Object key) |
java.util.Set<java.lang.Object> |
keySet() |
java.util.concurrent.locks.ReentrantReadWriteLock |
lockFor(java.lang.Object key) |
java.util.concurrent.locks.ReentrantReadWriteLock[] |
locks() |
java.util.Set |
pinnedKeySet() |
int |
pinnedSize() |
Element |
put(java.lang.Object key,
Element element,
long sizeOf) |
Element |
putIfAbsent(java.lang.Object key,
Element element,
long sizeOf) |
int |
quickSize()
Returns the number of key-value mappings in this map without locking anything.
|
void |
recalculateSize(java.lang.Object key) |
Element |
remove(java.lang.Object key) |
boolean |
remove(java.lang.Object key,
java.lang.Object value) |
protected SelectableConcurrentHashMap.Segment |
segmentFor(int hash)
Returns the segment that should be used for key with given hash
|
protected java.util.List<SelectableConcurrentHashMap.Segment> |
segments() |
void |
setMaxSize(long maxSize) |
void |
setPinned(java.lang.Object key,
boolean pinned) |
int |
size() |
java.lang.Object |
storedObject(Element e)
Return an object of the kind which will be stored when
the element is going to be inserted
|
void |
unpinAll() |
java.util.Collection<Element> |
values() |
protected static final Element DUMMY_PINNED_ELEMENT
static final int DEFAULT_INITIAL_CAPACITY
static final float DEFAULT_LOAD_FACTOR
private static final int MAXIMUM_CAPACITY
private static final int MAX_SEGMENTS
private static final int RETRIES_BEFORE_LOCK
private final int segmentMask
private final int segmentShift
private final SelectableConcurrentHashMap.Segment[] segments
private final java.util.Random rndm
private final PoolAccessor poolAccessor
private final boolean elementPinningEnabled
private volatile long maxSize
private volatile SelectableConcurrentHashMap.PinnedKeySet pinnedKeySet
private final RegisteredEventListeners cacheEventNotificationService
private java.util.Set<java.lang.Object> keySet
private java.util.Set<java.util.Map.Entry<java.lang.Object,Element>> entrySet
private java.util.Collection<Element> values
public SelectableConcurrentHashMap(PoolAccessor poolAccessor, boolean elementPinningEnabled, int concurrency, long maximumSize, RegisteredEventListeners cacheEventNotificationService)
public SelectableConcurrentHashMap(PoolAccessor poolAccessor, boolean elementPinningEnabled, int initialCapacity, float loadFactor, int concurrency, long maximumSize, RegisteredEventListeners cacheEventNotificationService)
public void setMaxSize(long maxSize)
public Element[] getRandomValues(int size, java.lang.Object keyHint)
public java.lang.Object storedObject(Element e)
e
- the elementpublic int quickSize()
public boolean isEmpty()
public int size()
public int pinnedSize()
public java.util.concurrent.locks.ReentrantReadWriteLock lockFor(java.lang.Object key)
public java.util.concurrent.locks.ReentrantReadWriteLock[] locks()
public Element get(java.lang.Object key)
public boolean containsKey(java.lang.Object key)
public boolean containsValue(java.lang.Object value)
public Element remove(java.lang.Object key)
public boolean remove(java.lang.Object key, java.lang.Object value)
public void clear()
public void unpinAll()
public void setPinned(java.lang.Object key, boolean pinned)
public boolean isPinned(java.lang.Object key)
public java.util.Set<java.lang.Object> keySet()
public java.util.Collection<Element> values()
public java.util.Set<java.util.Map.Entry<java.lang.Object,Element>> entrySet()
protected SelectableConcurrentHashMap.Segment createSegment(int initialCapacity, float lf)
public boolean evict()
private SelectableConcurrentHashMap.Segment getRandomSegment()
public void recalculateSize(java.lang.Object key)
public java.util.Set pinnedKeySet()
protected final SelectableConcurrentHashMap.Segment segmentFor(int hash)
hash
- the hash code for the keyprotected final java.util.List<SelectableConcurrentHashMap.Segment> segments()
protected static int hash(int h)