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
Modifier and TypeFieldDescriptionprotected static final int
protected static final double
protected static final double
protected int
The number of distinct associations in the map; its "size()".protected static final byte
protected int
The number of table entries in state==FREE.protected static final byte
protected int
protected double
The maximum load factor for the hashtable.protected double
The minimum load factor for the hashtable.protected T[]
-
Constructor Summary
ConstructorDescriptionObjectPool
(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 int
chooseGrowCapacity
(int size, double minLoad, double maxLoad) protected final int
chooseHighWaterMark
(int capacity, double maxLoad) protected final int
chooseLowWaterMark
(int capacity, double minLoad) void
clear()
Removes all objects from the pool but keeps the current size of the internal storage.boolean
Returns true it the Object is already in the ObjectPool and false otherwise.protected boolean
protected int
protected int
indexOfInsertion
(T key) iterator()
Returns an Iterator of thisObjectPool
.protected int
nextPrime
(int desiredCapacity) protected void
rehash
(int newCapacity) protected void
setUp
(int initialCapacity, double minLoadFactor, double maxLoadFactor) int
size()
Return the number of entries in the ObjectPool.void
Reduce 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 theIterator
can not be counted on to be in the same order as they were inserted into theObjectPool
. TheIterator
returned does not support the removal ofObjectPool
members. -
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)
-