Package org.jboss.jandex
Class StrongInternPool<E>
- java.lang.Object
-
- org.jboss.jandex.StrongInternPool<E>
-
- All Implemented Interfaces:
java.io.Serializable,java.lang.Cloneable
- Direct Known Subclasses:
StrongInternPool.ByteArrayInternPool,StrongInternPool.FieldInternPool,StrongInternPool.MethodInternPool,StrongInternPool.RecordComponentInternPool,StrongInternPool.StringInternPool,StrongInternPool.TypeArrayInternPool,StrongInternPool.TypeInternPool
abstract 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 static classStrongInternPool.ByteArrayInternPoolprivate static classStrongInternPool.FieldInternPoolprivate classStrongInternPool.IdentityHashSetIteratorclassStrongInternPool.Indexprivate static classStrongInternPool.MethodInternPoolprivate static classStrongInternPool.RecordComponentInternPoolprivate static classStrongInternPool.StringInternPoolprivate static classStrongInternPool.TypeArrayInternPoolprivate static classStrongInternPool.TypeInternPool
-
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 java.lang.Class<E>elementTypeThe class of values that may be present intable.private 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(java.lang.Class<E> elementType)StrongInternPool(java.lang.Class<E> elementType, int initialCapacity)StrongInternPool(java.lang.Class<E> elementType, int initialCapacity, float loadFactor)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidclear()StrongInternPool<E>clone()booleancontains(java.lang.Object entry)(package private) booleaneq(java.lang.Object o1, java.lang.Object o2)(package private) abstract booleanequality(E o1, E o2)(package private) static StrongInternPool<byte[]>forByteArrays()(package private) static StrongInternPool<FieldInternal>forFields()(package private) static StrongInternPool<MethodInternal>forMethods()(package private) static StrongInternPool<RecordComponentInternal>forRecordComponents()(package private) static StrongInternPool<java.lang.String>forStrings()(package private) static StrongInternPool<Type[]>forTypeArrays()(package private) static StrongInternPool<Type>forTypes()(package private) inthash(java.lang.Object o)(package private) abstract inthashCode(E 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)(package private) booleanmayContain(java.lang.Object o)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
-
elementType
private final java.lang.Class<E> elementType
The class of values that may be present intable.
-
table
private transient java.lang.Object[] table
The open-addressed tableMust be
Object[]instead ofE[]to allow storing theNULLmarker.
-
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)
-
mayContain
boolean mayContain(java.lang.Object o)
-
eq
boolean eq(java.lang.Object o1, java.lang.Object o2)
-
hash
int hash(java.lang.Object o)
-
hashCode
abstract int hashCode(E o)
-
maskNull
private static <K> K maskNull(K key)
-
unmaskNull
private static <K> K unmaskNull(K key)
-
nextIndex
private int nextIndex(int index, int length)
-
index
private static 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. Equal objects with different identity (aka duplicates) can be eliminated with this method.- Parameters:
entry- the object to internalize- Returns:
- the one true unique object (equal to
entry)
-
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
-
forByteArrays
static StrongInternPool<byte[]> forByteArrays()
-
forStrings
static StrongInternPool<java.lang.String> forStrings()
-
forTypes
static StrongInternPool<Type> forTypes()
-
forTypeArrays
static StrongInternPool<Type[]> forTypeArrays()
-
forMethods
static StrongInternPool<MethodInternal> forMethods()
-
forFields
static StrongInternPool<FieldInternal> forFields()
-
forRecordComponents
static StrongInternPool<RecordComponentInternal> forRecordComponents()
-
-