Groovy 1.7.0

org.codehaus.groovy.runtime.metaclass
Class MemoryAwareConcurrentReadMap

java.lang.Object
  org.codehaus.groovy.runtime.metaclass.MemoryAwareConcurrentReadMap

class MemoryAwareConcurrentReadMap
extends Object

This Map is a stripped down version of ConcurrentReaderHashMap with small modifications here and there. It is no full Map, it does have put/get/remove, but no iterators. This map is intended to hold values and keys as SoftReference. If one of value or key are removed, so will be complete entry. This map will not use the equals method to compare keys, think of it as a IdentityHashMap with features of concurrency and memory aware caching. As ConcurrentReaderHashMap also does this implementation prefer read operations and tries not to lock if possible. SoftReferenced values are only removed from the map if the map goes into a synchronization block on this. This may affect reads, but only in rare cases.


Nested Class Summary
class MemoryAwareConcurrentReadMap.BarrierLock

A Serializable class for barrier lock *

class MemoryAwareConcurrentReadMap.DummyRef

A dummy to replace the SoftReference if needed

class MemoryAwareConcurrentReadMap.Entry

ConcurrentReaderHashMap collision list entry.

interface MemoryAwareConcurrentReadMap.Reference

Reference class used to support get()

class MemoryAwareConcurrentReadMap.SoftRef

A SoftReference representing a key or value of the map.

 
Field Summary
static int DEFAULT_INITIAL_CAPACITY

The default initial number of table slots for this table (32).

static float DEFAULT_LOAD_FACTOR

The default load factor for this table (1.0).

protected BarrierLock barrierLock

Lock used only for its memory effects.

protected int count

The total number of mappings in the hash table.

protected Object lastWrite

field written to only to guarantee lock ordering.

protected float loadFactor

The load factor for the hash table.

protected Entry[] table

The hash table data.

protected int threshold

The table is rehashed when its size exceeds this threshold.

 
Constructor Summary
MemoryAwareConcurrentReadMap()

 
Method Summary
def MemoryAwareConcurrentReadMap(int initialCapacity, float loadFactor)

Constructs a new, empty map with the specified initial capacity and the specified load factor.

def MemoryAwareConcurrentReadMap(int initialCapacity)

Constructs a new, empty map with the specified initial capacity and default load factor.

def MemoryAwareConcurrentReadMap()

Constructs a new, empty map with a default initial capacity and load factor.

void clear()

Removes all mappings from this map.

protected boolean eq(Object x, Object y)

Check for referential equality, null allowed

Object get(Object key)

Returns the value to which the specified key is mapped in this table.

protected Entry[] getTableForReading()

Get ref to table; the reference and the cells it accesses will be at least as fresh as from last use of barrierLock

boolean isEmpty()

Returns true if this map contains no key-value mappings.

Object put(Object key, Object value)

Maps the specified key to the specified value in this table.

protected void recordModification(Object x)

Force a memory synchronization that will cause all readers to see table.

protected void rehash()

Rehashes the contents of this map into a new table with a larger capacity.

Object remove(Object key)

Removes the key (and its corresponding value) from this table.

int size()

Returns the number of key-value mappings in this map.

protected Object sput(Object key, Object value, int hash)

Continuation of put(), called only when synch lock is held and interference has been detected.

protected Object sremove(Object key, int hash)

Continuation of remove(), called only when synch lock is held and interference has been detected.

 
Methods inherited from class Object
wait, wait, wait, hashCode, getClass, equals, toString, notify, notifyAll
 

Field Detail

DEFAULT_INITIAL_CAPACITY

static final int DEFAULT_INITIAL_CAPACITY
The default initial number of table slots for this table (32). Used when not otherwise specified in constructor.


DEFAULT_LOAD_FACTOR

static final float DEFAULT_LOAD_FACTOR
The default load factor for this table (1.0). Used when not otherwise specified in constructor.


barrierLock

protected final BarrierLock barrierLock
Lock used only for its memory effects.


count

protected int count
The total number of mappings in the hash table.


lastWrite

protected Object lastWrite
field written to only to guarantee lock ordering.


loadFactor

protected float loadFactor
The load factor for the hash table.
serial:


table

protected Entry[] table
The hash table data.


threshold

protected int threshold
The table is rehashed when its size exceeds this threshold. (The value of this field is always (int)(capacity * loadFactor).)
serial:


 
Constructor Detail

MemoryAwareConcurrentReadMap

MemoryAwareConcurrentReadMap()


 
Method Detail

MemoryAwareConcurrentReadMap

public def MemoryAwareConcurrentReadMap(int initialCapacity, float loadFactor)
Constructs a new, empty map with the specified initial capacity and the specified load factor.
param:
initialCapacity the initial capacity The actual initial capacity is rounded to the nearest power of two.
param:
loadFactor the load factor of the ConcurrentReaderHashMap
throws:
IllegalArgumentException if the initial maximum number of elements is less than zero, or if the load factor is nonpositive.


MemoryAwareConcurrentReadMap

public def MemoryAwareConcurrentReadMap(int initialCapacity)
Constructs a new, empty map with the specified initial capacity and default load factor.
param:
initialCapacity the initial capacity of the ConcurrentReaderHashMap.
throws:
IllegalArgumentException if the initial maximum number of elements is less than zero.


MemoryAwareConcurrentReadMap

public def MemoryAwareConcurrentReadMap()
Constructs a new, empty map with a default initial capacity and load factor.


clear

public void clear()
Removes all mappings from this map.


eq

protected boolean eq(Object x, Object y)
Check for referential equality, null allowed


get

public Object get(Object key)
Returns the value to which the specified key is mapped in this table.
param:
key a key in the table.
return:
the value to which the key is mapped in this table; null if the key is not mapped to any value in this table.
exception:
NullPointerException if the key is null.
see:
#put(Object, Object)


getTableForReading

protected final Entry[] getTableForReading()
Get ref to table; the reference and the cells it accesses will be at least as fresh as from last use of barrierLock


isEmpty

public boolean isEmpty()
Returns true if this map contains no key-value mappings.
return:
true if this map contains no key-value mappings.


put

public Object put(Object key, Object value)
Maps the specified key to the specified value in this table. Neither the key nor the value can be null.

The value can be retrieved by calling the get method with a key that is equal to the original key.

param:
key the table key.
param:
value the value.
return:
the previous value of the specified key in this table, or null if it did not have one.
exception:
NullPointerException if the key or value is null.
see:
#get(Object)


recordModification

protected final void recordModification(Object x)
Force a memory synchronization that will cause all readers to see table. Call only when already holding main synch lock.


rehash

protected void rehash()
Rehashes the contents of this map into a new table with a larger capacity. This method is called automatically when the number of keys in this map exceeds its capacity and load factor.


remove

public Object remove(Object key)
Removes the key (and its corresponding value) from this table. This method does nothing if the key is not in the table.
param:
key the key that needs to be removed.
return:
the value to which the key had been mapped in this table, or null if the key did not have a mapping.
exception:
NullPointerException if the key is null.


size

public int size()
Returns the number of key-value mappings in this map.
return:
the number of key-value mappings in this map.


sput

protected Object sput(Object key, Object value, int hash)
Continuation of put(), called only when synch lock is held and interference has been detected.


sremove

protected Object sremove(Object key, int hash)
Continuation of remove(), called only when synch lock is held and interference has been detected.


 

Copyright © 2003-2009 The Codehaus. All rights reserved.