Author: schor Date: Tue Feb 16 22:36:36 2016 New Revision: 1730764 URL: http://svn.apache.org/viewvc?rev=1730764&view=rev Log: [UIMA-4674] allow initial heap size spec to set the size for this structure.
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/Id2FS.java Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/Id2FS.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/Id2FS.java?rev=1730764&r1=1730763&r2=1730764&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/Id2FS.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/Id2FS.java Tue Feb 16 22:36:36 2016 @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.function.Consumer; import org.apache.uima.cas.CASRuntimeException; -import org.apache.uima.cas.FeatureStructure; import org.apache.uima.jcas.cas.TOP; /** @@ -45,8 +44,8 @@ public class Id2FS { final private ArrayList<WeakReference<TOP>> id2fsw; - public Id2FS() { - id2fsw = new ArrayList<>(); + public Id2FS(int initialHeapSize) { + id2fsw = new ArrayList<>(initialHeapSize >> 4); id2fsw.add(null); // because id's start with 1 } @@ -76,10 +75,19 @@ public class Id2FS { return id2fsw.size(); } + /** + * adjusts the underlying array down in size if grew beyond the reset heap size value + */ void clear() { - id2fsw.clear(); - id2fsw.add(null); // so that ids start at 1 - id2fsw.trimToSize(); + if (id2fsw.size() > (CASImpl.DEFAULT_RESET_HEAP_SIZE >> 4)) { + id2fsw.clear(); + id2fsw.add(null); // so that ids start at 1 + id2fsw.trimToSize(); + id2fsw.ensureCapacity(CASImpl.DEFAULT_INITIAL_HEAP_SIZE >> 4); + } else { + id2fsw.clear(); + id2fsw.add(null); // so that ids start at 1 + } } /**