Package mondrian.util
Class ObjectPool<T>
java.lang.Object
mondrian.util.ObjectPool<T>
An
ObjectPool is a low-memory replacement for a
HashSet. A HashSet contains a HashMap
which in turn has
an array of Entry objects, the Entry objects themselves, and the
key and value objects. An ObjectPool has simply an array of
objects and the objects themselves which server as both key and value.
This is like the String intern method, but works for
an Object type and whereas the String intern method is global
an ObjectPool can be used within a context and then garbage collected.
Objects can not removed from an ObjectPool except by calling the
clear method which removes all objects.
Just as with a HashSet's key objects, objects to be placed into
an ObjectPool must implement the equals and
hashCode methods.
This implementation is NOT thread safe.
- Author:
- Richard Emberson
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final intprotected static final doubleprotected static final doubleprotected intThe number of distinct associations in the map; its "size()".protected static final byteprotected intThe number of table entries in state==FREE.protected static final byteprotected intprotected doubleThe maximum load factor for the hashtable.protected doubleThe minimum load factor for the hashtable.protected T[] -
Constructor Summary
ConstructorsConstructorDescriptionObjectPool(int initialCapacity) ObjectPool(int initialCapacity, double minLoadFactor, double maxLoadFactor) -
Method Summary
Modifier and TypeMethodDescriptionAdds an object to the ObjectPool if it is not already in the pool or returns the object that is already in the pool that matches the object being added.protected intchooseGrowCapacity(int size, double minLoad, double maxLoad) protected final intchooseHighWaterMark(int capacity, double maxLoad) protected final intchooseLowWaterMark(int capacity, double minLoad) voidclear()Removes all objects from the pool but keeps the current size of the internal storage.booleanReturns true it the Object is already in the ObjectPool and false otherwise.protected booleanprotected intprotected intindexOfInsertion(T key) iterator()Returns an Iterator of thisObjectPool.protected intnextPrime(int desiredCapacity) protected voidrehash(int newCapacity) protected voidsetUp(int initialCapacity, double minLoadFactor, double maxLoadFactor) intsize()Return the number of entries in the ObjectPool.voidReduce the size of the internal arrays to a size just big enough to hold the current set of entries.
-
Field Details
-
FREE
protected static final byte FREE- See Also:
-
FULL
protected static final byte FULL- See Also:
-
DEFAULT_CAPACITY
protected static final int DEFAULT_CAPACITY- See Also:
-
DEFAULT_MIN_LOAD_FACTOR
protected static final double DEFAULT_MIN_LOAD_FACTOR- See Also:
-
DEFAULT_MAX_LOAD_FACTOR
protected static final double DEFAULT_MAX_LOAD_FACTOR- See Also:
-
distinct
protected int distinctThe number of distinct associations in the map; its "size()". -
highWaterMark
protected int highWaterMark -
minLoadFactor
protected double minLoadFactorThe minimum load factor for the hashtable. -
maxLoadFactor
protected double maxLoadFactorThe maximum load factor for the hashtable. -
values
-
freeEntries
protected int freeEntriesThe number of table entries in state==FREE.
-
-
Constructor Details
-
ObjectPool
public ObjectPool() -
ObjectPool
public ObjectPool(int initialCapacity) -
ObjectPool
public ObjectPool(int initialCapacity, double minLoadFactor, double maxLoadFactor)
-
-
Method Details
-
size
public int size()Return the number of entries in the ObjectPool.- Returns:
- number of entries.
-
trimToSize
public void trimToSize()Reduce the size of the internal arrays to a size just big enough to hold the current set of entries. Generally, this should only be called after all entries have been added. Calling this causes a new, smaller array to be allocated, the objects are copied to the new array and then the old array is free to be garbage collected; there is a small time when both arrays are in memory. -
contains
Returns true it the Object is already in the ObjectPool and false otherwise.- Parameters:
key- Object to test if member already or not.- Returns:
- true is already member
-
add
Adds an object to the ObjectPool if it is not already in the pool or returns the object that is already in the pool that matches the object being added.- Parameters:
key- Object to add to pool- Returns:
- Equivalent object, if it exists, otherwise key
-
clear
public void clear()Removes all objects from the pool but keeps the current size of the internal storage. -
iterator
Returns an Iterator of thisObjectPool. The order of the Objects returned by theIteratorcan not be counted on to be in the same order as they were inserted into theObjectPool. TheIteratorreturned does not support the removal ofObjectPoolmembers. -
chooseGrowCapacity
protected int chooseGrowCapacity(int size, double minLoad, double maxLoad) -
chooseHighWaterMark
protected final int chooseHighWaterMark(int capacity, double maxLoad) -
chooseLowWaterMark
protected final int chooseLowWaterMark(int capacity, double minLoad) -
nextPrime
protected int nextPrime(int desiredCapacity) -
setUp
protected void setUp(int initialCapacity, double minLoadFactor, double maxLoadFactor) -
hash
-
equals
-
indexOfInsertion
-
rehash
protected void rehash(int newCapacity)
-