Package org.jboss.jandex
Class StrongInternPool<E>
- java.lang.Object
-
- org.jboss.jandex.StrongInternPool<E>
-
- All Implemented Interfaces:
java.io.Serializable,java.lang.Cloneable
class StrongInternPool<E> extends java.lang.Object implements java.lang.Cloneable, java.io.SerializableA strong intern pool. The pool acts as a set where the first stored entry can be retrieved. This can be used to conserve memory by eliminating duplicate objects (those that are equal but have different identity). It however holds strong references to every item in the pool, so it must be cleared to allow for GC. Note: It is very important to use a smaller load factor than you normally would for HashSet, since the implementation is open-addressed with linear probing. With a 50% load-factor a get is expected to return in only 2 probes. However, a 90% load-factor is expected to return in around 50 probes.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classStrongInternPool.IdentityHashSetIteratorclassStrongInternPool.Index
-
Field Summary
Fields Modifier and Type Field Description private static intDEFAULT_CAPACITYSame default as HashMap, must be a power of 2private static floatDEFAULT_LOAD_FACTOR67%, just like IdentityHashMapprivate StrongInternPool.IndexindexCache for an indexprivate floatloadFactorThe user defined load factor which defines when to resizeprivate static intMAXIMUM_CAPACITYMAX_INT - 1private intmodCountCounter used to detect changes made outside of an iteratorprivate static java.lang.ObjectNULLMarks null keys.private static longserialVersionUIDSerialization IDprivate intsizeThe current number of key-value pairsprivate java.lang.Object[]tableThe open-addressed tableprivate intthresholdThe next resize
-
Constructor Summary
Constructors Constructor Description StrongInternPool()StrongInternPool(int initialCapacity)StrongInternPool(int initialCapacity, float loadFactor)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()StrongInternPool<E>clone()booleancontains(java.lang.Object entry)private static booleaneq(java.lang.Object o1, java.lang.Object o2)private static inthash(java.lang.Object o)StrongInternPool.Indexindex()private static intindex(int hashCode, int length)private voidinit(int initialCapacity, float loadFactor)Eintern(E entry)Internalizes the specified object by always returning the first ever stored.booleanisEmpty()java.util.Iterator<E>iterator()private static <K> KmaskNull(K key)private intnextIndex(int index, int length)private intoffset(java.lang.Object entry)voidprintDebugStats()private voidputForCreate(E entry)private voidreadObject(java.io.ObjectInputStream s)private voidrelocate(int start)booleanremove(java.lang.Object o)private voidresize(int from)intsize()java.lang.Object[]toInternalArray()Advanced method that returns the internal table.java.lang.StringtoString()private static <K> KunmaskNull(K key)private voidwriteObject(java.io.ObjectOutputStream s)
-
-
-
Field Detail
-
NULL
private static final java.lang.Object NULL
Marks null keys.
-
serialVersionUID
private static final long serialVersionUID
Serialization ID- See Also:
- Constant Field Values
-
DEFAULT_CAPACITY
private static final int DEFAULT_CAPACITY
Same default as HashMap, must be a power of 2- See Also:
- Constant Field Values
-
MAXIMUM_CAPACITY
private static final int MAXIMUM_CAPACITY
MAX_INT - 1- See Also:
- Constant Field Values
-
DEFAULT_LOAD_FACTOR
private static final float DEFAULT_LOAD_FACTOR
67%, just like IdentityHashMap- See Also:
- Constant Field Values
-
table
private transient java.lang.Object[] table
The open-addressed table
-
size
private transient int size
The current number of key-value pairs
-
threshold
private transient int threshold
The next resize
-
loadFactor
private final float loadFactor
The user defined load factor which defines when to resize
-
modCount
private transient int modCount
Counter used to detect changes made outside of an iterator
-
index
private transient StrongInternPool.Index index
Cache for an index
-
-
Method Detail
-
init
private void init(int initialCapacity, float loadFactor)
-
eq
private static boolean eq(java.lang.Object o1, java.lang.Object o2)
-
hash
private static int hash(java.lang.Object o)
-
maskNull
private static final <K> K maskNull(K key)
-
unmaskNull
private static final <K> K unmaskNull(K key)
-
nextIndex
private int nextIndex(int index, int length)
-
index
private static final int index(int hashCode, int length)
-
size
public int size()
-
isEmpty
public boolean isEmpty()
-
contains
public boolean contains(java.lang.Object entry)
-
offset
private int offset(java.lang.Object entry)
-
intern
public E intern(E entry)
Internalizes the specified object by always returning the first ever stored. Equivalent objects (via .equals) but with different identity (aka duplicates) can be eliminated with this method.- Parameters:
entry- the object to internalize- Returns:
- the one true unique (and equivalent) object
-
resize
private void resize(int from)
-
remove
public boolean remove(java.lang.Object o)
-
relocate
private void relocate(int start)
-
clear
public void clear()
-
clone
public StrongInternPool<E> clone()
- Overrides:
clonein classjava.lang.Object
-
toInternalArray
public java.lang.Object[] toInternalArray()
Advanced method that returns the internal table. The resulting array will contain nulls at random places that must be skipped. In addition, it will not operate correctly if a null was inserted into the set. Use at your own risk....- Returns:
- an array containing elements in this set along with randomly placed nulls,
-
printDebugStats
public void printDebugStats()
-
readObject
private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, java.lang.ClassNotFoundException- Throws:
java.io.IOExceptionjava.lang.ClassNotFoundException
-
putForCreate
private void putForCreate(E entry)
-
writeObject
private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException- Throws:
java.io.IOException
-
iterator
public java.util.Iterator<E> iterator()
-
index
public StrongInternPool.Index index()
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-