diff --git a/core/src/main/java/org/apache/accumulo/core/client/IsolatedScanner.java b/core/src/main/java/org/apache/accumulo/core/client/IsolatedScanner.java index 5a7328a5f26..91fba468423 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/IsolatedScanner.java +++ b/core/src/main/java/org/apache/accumulo/core/client/IsolatedScanner.java @@ -143,7 +143,7 @@ public RowBufferingIterator(Scanner scanner, ScannerOptions opts, Range range, l this.batchSize = batchSize; this.readaheadThreshold = readaheadThreshold; - buffer = bufferFactory.newBuffer(); + buffer = bufferFactory.newBuffer(this.batchSize); this.source = newIterator(range); @@ -173,7 +173,7 @@ public void remove() { } public interface RowBufferFactory { - RowBuffer newBuffer(); + RowBuffer newBuffer(int initialSize); } public interface RowBuffer extends Iterable> { @@ -188,14 +188,18 @@ public interface RowBuffer extends Iterable> { public static class MemoryRowBufferFactory implements RowBufferFactory { @Override - public RowBuffer newBuffer() { - return new MemoryRowBuffer(); + public RowBuffer newBuffer(int initialSize) { + return new MemoryRowBuffer(initialSize); } } public static class MemoryRowBuffer implements RowBuffer { - private final ArrayList> buffer = new ArrayList<>(); + private final ArrayList> buffer; + + private MemoryRowBuffer(int initialSize) { + buffer = new ArrayList<>(initialSize); + } @Override public void add(Entry entry) { diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/InstanceOperationsImpl.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/InstanceOperationsImpl.java index c11b6f3c210..a5583552cea 100644 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/InstanceOperationsImpl.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/InstanceOperationsImpl.java @@ -229,9 +229,10 @@ public Set getScanServers() { @Override public List getTabletServers() { ZooCache cache = context.getZooCache(); - String path = context.getZooKeeperRoot() + Constants.ZTSERVERS; - List results = new ArrayList<>(); - for (String candidate : cache.getChildren(path)) { + final String path = context.getZooKeeperRoot() + Constants.ZTSERVERS; + final List candidates = cache.getChildren(path); + final List results = new ArrayList<>(candidates.size()); + for (String candidate : candidates) { var children = cache.getChildren(path + "/" + candidate); if (children != null && !children.isEmpty()) { var copy = new ArrayList<>(children); @@ -253,8 +254,9 @@ public List getActiveScans(String tserver) try { client = getClient(ThriftClientTypes.TABLET_SCAN, parsedTserver, context); - List as = new ArrayList<>(); - for (var activeScan : client.getActiveScans(TraceUtil.traceInfo(), context.rpcCreds())) { + final var scans = client.getActiveScans(TraceUtil.traceInfo(), context.rpcCreds()); + List as = new ArrayList<>(scans.size()); + for (var activeScan : scans) { try { as.add(new ActiveScanImpl(context, activeScan)); } catch (TableNotFoundException e) { @@ -326,7 +328,7 @@ public List getActiveCompactions() var executorService = context.threadPools().getPoolBuilder(INSTANCE_OPS_COMPACTIONS_FINDER_POOL) .numCoreThreads(numThreads).build(); try { - List>> futures = new ArrayList<>(); + List>> futures = new ArrayList<>(tservers.size()); for (String tserver : tservers) { futures.add(executorService.submit(() -> getActiveCompactions(tserver))); @@ -344,7 +346,7 @@ public List getActiveCompactions() } }); - List ret = new ArrayList<>(); + List ret = new ArrayList<>(futures.size()); for (Future> future : futures) { try { ret.addAll(future.get()); diff --git a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java index 53a44dc0bf1..f2ebcba11c0 100644 --- a/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java +++ b/core/src/main/java/org/apache/accumulo/core/clientImpl/TabletServerBatchReaderIterator.java @@ -303,7 +303,7 @@ private void binRanges(TabletLocator tabletLocator, List ranges, binnedRanges2.put(entry.getKey(), tabletMap); for (Entry> tabletRanges : entry.getValue().entrySet()) { Range tabletRange = tabletRanges.getKey().toDataRange(); - List clippedRanges = new ArrayList<>(); + List clippedRanges = new ArrayList<>(tabletRanges.getValue().size()); tabletMap.put(tabletRanges.getKey(), clippedRanges); for (Range range : tabletRanges.getValue()) { clippedRanges.add(tabletRange.clip(range)); @@ -339,7 +339,7 @@ private void processFailures(Map> failures, ResultReceiver failSleepTime = Math.min(5000, failSleepTime * 2); Map>> binnedRanges = new HashMap<>(); - List allRanges = new ArrayList<>(); + List allRanges = new ArrayList<>(failures.values().stream().mapToInt(List::size).sum()); for (List ranges : failures.values()) { allRanges.addAll(ranges); @@ -562,7 +562,7 @@ private void doLookups(Map>> binnedRanges, List locations = new ArrayList<>(binnedRanges.keySet()); Collections.shuffle(locations); - List queryTasks = new ArrayList<>(); + List queryTasks = new ArrayList<>(locations.size()); for (final String tsLocation : locations) { @@ -828,7 +828,7 @@ static void doLookup(ClientContext context, String server, Map> entry : requested.entrySet()) { - ArrayList ranges = new ArrayList<>(); + ArrayList ranges = new ArrayList<>(entry.getValue().size()); for (Range range : entry.getValue()) { ranges.add(new Range(range)); } diff --git a/core/src/main/java/org/apache/accumulo/core/data/Mutation.java b/core/src/main/java/org/apache/accumulo/core/data/Mutation.java index 53f834cedf9..25393a51bbf 100644 --- a/core/src/main/java/org/apache/accumulo/core/data/Mutation.java +++ b/core/src/main/java/org/apache/accumulo/core/data/Mutation.java @@ -1440,8 +1440,8 @@ public void readFields(DataInput in) throws IOException { boolean valuesPresent = (first & 0x01) == 0x01; if (valuesPresent) { - values = new ArrayList<>(); int numValues = WritableUtils.readVInt(in); + values = new ArrayList<>(numValues); for (int i = 0; i < numValues; i++) { len = WritableUtils.readVInt(in); byte[] val = new byte[len]; @@ -1480,8 +1480,8 @@ private void oldReadFields(byte first, DataInput in) throws IOException { List localValues; boolean valuesPresent = in.readBoolean(); if (valuesPresent) { - localValues = new ArrayList<>(); int numValues = in.readInt(); + localValues = new ArrayList<>(numValues); for (int i = 0; i < numValues; i++) { len = in.readInt(); byte[] val = new byte[len]; diff --git a/core/src/main/java/org/apache/accumulo/core/file/rfile/MultiLevelIndex.java b/core/src/main/java/org/apache/accumulo/core/file/rfile/MultiLevelIndex.java index 9c7b249fff4..69e3c3ba3a0 100644 --- a/core/src/main/java/org/apache/accumulo/core/file/rfile/MultiLevelIndex.java +++ b/core/src/main/java/org/apache/accumulo/core/file/rfile/MultiLevelIndex.java @@ -361,7 +361,7 @@ public void readFields(DataInput in, int version) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); - ArrayList oal = new ArrayList<>(); + ArrayList oal = new ArrayList<>(size); for (int i = 0; i < size; i++) { IndexEntry ie = new IndexEntry(false); diff --git a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/IteratorConfigUtil.java b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/IteratorConfigUtil.java index 5fb0afdca9a..1c6ea1577cb 100644 --- a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/IteratorConfigUtil.java +++ b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/IteratorConfigUtil.java @@ -196,8 +196,8 @@ public static SortedKeyValueIterator convertItersAndLoad(IteratorScop List iterators, IteratorEnvironment env) throws IOException, ReflectiveOperationException { - List ssiList = new ArrayList<>(); - Map> ssio = new HashMap<>(); + List ssiList = new ArrayList<>(iterators.size()); + Map> ssio = new HashMap<>(iterators.size()); for (IteratorSetting is : iterators) { ssiList.add(new IterInfo(is.getPriority(), is.getIteratorClass(), is.getName())); diff --git a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/SystemIteratorUtil.java b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/SystemIteratorUtil.java index bac1d31ef19..339c2dad2fe 100644 --- a/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/SystemIteratorUtil.java +++ b/core/src/main/java/org/apache/accumulo/core/iteratorsImpl/system/SystemIteratorUtil.java @@ -53,7 +53,7 @@ public static IteratorSetting toIteratorSetting(TIteratorSetting tis) { } public static IteratorConfig toIteratorConfig(List iterators) { - ArrayList tisList = new ArrayList<>(); + ArrayList tisList = new ArrayList<>(iterators.size()); for (IteratorSetting iteratorSetting : iterators) { tisList.add(toTIteratorSetting(iteratorSetting)); @@ -63,7 +63,7 @@ public static IteratorConfig toIteratorConfig(List iterators) { } public static List toIteratorSettings(IteratorConfig ic) { - List ret = new ArrayList<>(); + List ret = new ArrayList<>(ic.getIterators().size()); for (TIteratorSetting tIteratorSetting : ic.getIterators()) { ret.add(toIteratorSetting(tIteratorSetting)); } diff --git a/core/src/main/java/org/apache/accumulo/core/rpc/clients/TServerClient.java b/core/src/main/java/org/apache/accumulo/core/rpc/clients/TServerClient.java index 5f017668e9a..8e5553e09cd 100644 --- a/core/src/main/java/org/apache/accumulo/core/rpc/clients/TServerClient.java +++ b/core/src/main/java/org/apache/accumulo/core/rpc/clients/TServerClient.java @@ -72,9 +72,8 @@ default Pair getTabletServerConnection(Logger LOG, ThriftClientTypes tservers = new ArrayList<>(); - - tservers.addAll(zc.getChildren(context.getZooKeeperRoot() + Constants.ZTSERVERS)); + final List tservers = + new ArrayList<>(zc.getChildren(context.getZooKeeperRoot() + Constants.ZTSERVERS)); if (tservers.isEmpty()) { if (warned.compareAndSet(false, true)) { diff --git a/core/src/main/java/org/apache/accumulo/core/spi/balancer/GroupBalancer.java b/core/src/main/java/org/apache/accumulo/core/spi/balancer/GroupBalancer.java index 99e3c290d04..753980211f4 100644 --- a/core/src/main/java/org/apache/accumulo/core/spi/balancer/GroupBalancer.java +++ b/core/src/main/java/org/apache/accumulo/core/spi/balancer/GroupBalancer.java @@ -143,7 +143,8 @@ public void getAssignments(AssignmentParameters params) { Function partitioner = getLoggingPartitioner(); - List> tabletsByGroup = new ArrayList<>(); + List> tabletsByGroup = + new ArrayList<>(params.unassignedTablets().size()); for (Entry entry : params.unassignedTablets().entrySet()) { TabletServerId last = entry.getValue(); if (last != null) { diff --git a/core/src/main/java/org/apache/accumulo/core/spi/balancer/SimpleLoadBalancer.java b/core/src/main/java/org/apache/accumulo/core/spi/balancer/SimpleLoadBalancer.java index b593a104fe1..a40d0522060 100644 --- a/core/src/main/java/org/apache/accumulo/core/spi/balancer/SimpleLoadBalancer.java +++ b/core/src/main/java/org/apache/accumulo/core/spi/balancer/SimpleLoadBalancer.java @@ -168,7 +168,7 @@ public boolean getMigrations(Map current, // Sort by total number of online tablets, per server int total = 0; - ArrayList totals = new ArrayList<>(); + ArrayList totals = new ArrayList<>(current.size()); for (Entry entry : current.entrySet()) { int serverTotal = 0; if (entry.getValue() != null && entry.getValue().getTableMap() != null) { @@ -241,11 +241,11 @@ public boolean getMigrations(Map current, List move(ServerCounts tooMuch, ServerCounts tooLittle, int count, Map> donerTabletStats) { - if (count == 0) { + if (count <= 0) { return Collections.emptyList(); } - List result = new ArrayList<>(); + List result = new ArrayList<>(count); // Copy counts so we can update them as we propose migrations Map tooMuchMap = tabletCountsPerTable(tooMuch.status); Map tooLittleMap = tabletCountsPerTable(tooLittle.status); diff --git a/core/src/main/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlanner.java b/core/src/main/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlanner.java index 99bfd8472c2..0103243ef42 100644 --- a/core/src/main/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlanner.java +++ b/core/src/main/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlanner.java @@ -180,7 +180,7 @@ public void init(InitParameters params) { ExecutorConfig[] execConfigs = new Gson().fromJson(params.getOptions().get("executors"), ExecutorConfig[].class); - List tmpExec = new ArrayList<>(); + List tmpExec = new ArrayList<>(execConfigs.length); for (ExecutorConfig executorConfig : execConfigs) { Long maxSize = executorConfig.maxSize == null ? null diff --git a/core/src/main/java/org/apache/accumulo/core/summary/Gatherer.java b/core/src/main/java/org/apache/accumulo/core/summary/Gatherer.java index a917cdf7e76..850395d1aae 100644 --- a/core/src/main/java/org/apache/accumulo/core/summary/Gatherer.java +++ b/core/src/main/java/org/apache/accumulo/core/summary/Gatherer.java @@ -359,7 +359,7 @@ private class PartitionFuture implements Future { Map>> filesGBL; filesGBL = getFilesGroupedByLocation(fileSelector); - List> futures = new ArrayList<>(); + List> futures = new ArrayList<>(filesGBL.size() + 1); if (previousWork != null) { futures.add(CompletableFuture .completedFuture(new ProcessedFiles(previousWork.summaries, factory))); @@ -433,7 +433,7 @@ public interface FileSystemResolver { public Future processFiles(FileSystemResolver volMgr, Map> files, BlockCache summaryCache, BlockCache indexCache, Cache fileLenCache, ExecutorService srp) { - List> futures = new ArrayList<>(); + List> futures = new ArrayList<>(files.size()); for (Entry> entry : files.entrySet()) { futures.add(CompletableFuture.supplyAsync(() -> { List rrl = @@ -504,7 +504,7 @@ public Future gather(ExecutorService es) { // have each tablet server process ~100K files int numRequest = Math.max(numFiles / 100_000, 1); - List> futures = new ArrayList<>(); + List> futures = new ArrayList<>(numRequest); AtomicBoolean cancelFlag = new AtomicBoolean(false); diff --git a/core/src/main/java/org/apache/accumulo/core/util/ByteArraySet.java b/core/src/main/java/org/apache/accumulo/core/util/ByteArraySet.java index 9fb0edef9b2..e8828a91cee 100644 --- a/core/src/main/java/org/apache/accumulo/core/util/ByteArraySet.java +++ b/core/src/main/java/org/apache/accumulo/core/util/ByteArraySet.java @@ -40,7 +40,7 @@ public ByteArraySet(Collection c) { } public static ByteArraySet fromStrings(Collection c) { - List lst = new ArrayList<>(); + List lst = new ArrayList<>(c.size()); for (String s : c) { lst.add(s.getBytes(UTF_8)); } diff --git a/core/src/main/java/org/apache/accumulo/core/util/ByteBufferUtil.java b/core/src/main/java/org/apache/accumulo/core/util/ByteBufferUtil.java index a06d7ac745a..470d918d62f 100644 --- a/core/src/main/java/org/apache/accumulo/core/util/ByteBufferUtil.java +++ b/core/src/main/java/org/apache/accumulo/core/util/ByteBufferUtil.java @@ -56,7 +56,7 @@ public static List toByteBuffers(Collection bytesList) { if (bytesList == null) { return null; } - ArrayList result = new ArrayList<>(); + ArrayList result = new ArrayList<>(bytesList.size()); for (byte[] bytes : bytesList) { result.add(ByteBuffer.wrap(bytes)); } diff --git a/server/base/src/main/java/org/apache/accumulo/server/compaction/FileCompactor.java b/server/base/src/main/java/org/apache/accumulo/server/compaction/FileCompactor.java index 1045d13680f..91667826303 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/compaction/FileCompactor.java +++ b/server/base/src/main/java/org/apache/accumulo/server/compaction/FileCompactor.java @@ -263,7 +263,7 @@ private static void updateTotalEntries() { Collections.synchronizedSet(new HashSet<>()); public static List getRunningCompactions() { - ArrayList compactions = new ArrayList<>(); + ArrayList compactions = new ArrayList<>(runningCompactions.size()); runningCompactions.forEach(compactor -> compactions.add(new CompactionInfo(compactor))); diff --git a/server/base/src/main/java/org/apache/accumulo/server/fs/FileManager.java b/server/base/src/main/java/org/apache/accumulo/server/fs/FileManager.java index 9a3aad33c35..4e81899ed2f 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/fs/FileManager.java +++ b/server/base/src/main/java/org/apache/accumulo/server/fs/FileManager.java @@ -187,7 +187,7 @@ private static int countReaders(Map> files) { private List takeLRUOpenFiles(int numToTake) { - ArrayList openReaders = new ArrayList<>(); + ArrayList openReaders = new ArrayList<>(openFiles.size()); for (Entry> entry : openFiles.entrySet()) { openReaders.addAll(entry.getValue()); @@ -195,7 +195,7 @@ private List takeLRUOpenFiles(int numToTake) { Collections.sort(openReaders); - ArrayList ret = new ArrayList<>(); + ArrayList ret = new ArrayList<>(openReaders.size()); for (int i = 0; i < numToTake && i < openReaders.size(); i++) { OpenReader or = openReaders.get(i); @@ -517,7 +517,7 @@ public synchronized List openFiles(Map newlyReservedReaders = openFiles( files.keySet().stream().map(TabletFile::getPathStr).collect(Collectors.toList())); - ArrayList iters = new ArrayList<>(); + ArrayList iters = new ArrayList<>(newlyReservedReaders.size()); boolean sawTimeSet = files.values().stream().anyMatch(DataFileValue::isTimeSet); diff --git a/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java b/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java index 0fa7d7b7d37..05f947e30c1 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java +++ b/server/base/src/main/java/org/apache/accumulo/server/fs/VolumeManagerImpl.java @@ -322,7 +322,7 @@ public boolean rename(Path path, Path newPath) throws IOException { @Override public void bulkRename(Map oldToNewPathMap, int poolSize, String poolName, String transactionId) throws IOException { - List> results = new ArrayList<>(); + List> results = new ArrayList<>(oldToNewPathMap.size()); ExecutorService workerPool = ThreadPools.getServerThreadPools().getPoolBuilder(poolName) .numCoreThreads(poolSize).build(); oldToNewPathMap.forEach((oldPath, newPath) -> results.add(workerPool.submit(() -> { diff --git a/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java b/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java index 360ca94a813..c28b0a0f8f5 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java +++ b/server/base/src/main/java/org/apache/accumulo/server/util/MetadataTableUtil.java @@ -375,7 +375,6 @@ public static void deleteTable(TableId tableId, boolean insertDeletes, ServerCon public static Pair,SortedMap> getFileAndLogEntries(ServerContext context, KeyExtent extent) throws IOException { - ArrayList result = new ArrayList<>(); TreeMap sizes = new TreeMap<>(); TabletMetadata tablet = context.getAmple().readTablet(extent, FILES, LOGS, PREV_ROW, DIR); @@ -384,7 +383,7 @@ public static void deleteTable(TableId tableId, boolean insertDeletes, ServerCon throw new RuntimeException("Tablet " + extent + " not found in metadata"); } - result.addAll(tablet.getLogs()); + ArrayList result = new ArrayList<>(tablet.getLogs()); tablet.getFilesMap().forEach(sizes::put); diff --git a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java index f392d9e1cee..a64ec4413ba 100644 --- a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java +++ b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionFinalizer.java @@ -193,13 +193,14 @@ private void processPending() { while (!Thread.interrupted()) { try { - ArrayList batch = new ArrayList<>(); + ArrayList batch = + new ArrayList<>(pendingNotifications.size()); batch.add(pendingNotifications.take()); pendingNotifications.drainTo(batch); LOG.trace("Processing pending of batch size {}", batch.size()); - List> futures = new ArrayList<>(); + List> futures = new ArrayList<>(batch.size()); List statusesToDelete = new ArrayList<>(); diff --git a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/SharedBatchWriter.java b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/SharedBatchWriter.java index baf21be1d3f..29c4a84f014 100644 --- a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/SharedBatchWriter.java +++ b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/SharedBatchWriter.java @@ -83,7 +83,7 @@ public void write(Mutation m) { private void processMutations() { Timer timer = Timer.startNew(); while (true) { - ArrayList batch = new ArrayList<>(); + ArrayList batch = new ArrayList<>(mutations.size()); try { batch.add(mutations.take()); } catch (InterruptedException e) { diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java index 11635facfdc..e15fe6d1e26 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java @@ -626,7 +626,7 @@ public List getActiveTservers(TInfo tinfo, TCredentials credentials) } Set tserverInstances = manager.onlineTabletServers(); - List servers = new ArrayList<>(); + List servers = new ArrayList<>(tserverInstances.size()); for (TServerInstance tserverInstance : tserverInstances) { servers.add(tserverInstance.getHostPort()); } diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LogSorter.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LogSorter.java index c1ad0fd54c4..d77f67301d2 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LogSorter.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/log/LogSorter.java @@ -174,7 +174,7 @@ public void sort(VolumeManager fs, String name, Path srcPath, String destPath) final long bufferSize = sortedLogConf.getAsBytes(prop); Thread.currentThread().setName("Sorting " + name + " for recovery"); while (true) { - final ArrayList> buffer = new ArrayList<>(); + final ArrayList> buffer = new ArrayList<>(512); try { long start = input.getPos(); while (input.getPos() - start < bufferSize) { @@ -274,7 +274,8 @@ void writeBuffer(String destPath, List> buffer, in var logFileKey = pair.getFirst(); var logFileValue = pair.getSecond(); Key k = logFileKey.toKey(); - keyListMap.computeIfAbsent(k, (key) -> new ArrayList<>()).addAll(logFileValue.getMutations()); + keyListMap.computeIfAbsent(k, (key) -> new ArrayList<>(logFileValue.getMutations().size())) + .addAll(logFileValue.getMutations()); } try (var writer = FileOperations.getInstance().newWriterBuilder() @@ -302,8 +303,8 @@ public void startWatchingForRecoveryLogs(AbstractServer server) } public List getLogSorts() { - List result = new ArrayList<>(); synchronized (currentWork) { + List result = new ArrayList<>(currentWork.size()); for (Entry entries : currentWork.entrySet()) { RecoveryStatus status = new RecoveryStatus(); status.name = entries.getKey(); diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java index 0726c1997cb..8db43d5869b 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/session/SessionManager.java @@ -444,7 +444,8 @@ public Map> getActiveScansPerTable() { public List getActiveScans() { - final List activeScans = new ArrayList<>(); + final List activeScans = + new ArrayList<>(sessions.size() + deferredCleanupQueue.size()); final long ct = System.currentTimeMillis(); final Set> copiedIdleSessions = new HashSet<>(); diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java index 181ccfbbc9f..93da60b68dc 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/CompactableImpl.java @@ -697,7 +697,8 @@ public CompactableImpl(Tablet tablet, CompactionManager manager, tabletMutator.mutate(); } - ArrayList extCompactingFiles = new ArrayList<>(); + ArrayList extCompactingFiles = new ArrayList<>( + extCompactions.values().stream().mapToInt(ecm -> ecm.getJobFiles().size()).sum()); extCompactions.forEach((ecid, ecMeta) -> { if (!extCompactionsToRemove.containsKey(ecid)) { diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/ScanDataSource.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/ScanDataSource.java index c53dd825edf..602f61c8456 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/ScanDataSource.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/ScanDataSource.java @@ -216,8 +216,7 @@ private SortedKeyValueIterator createIterator() } var builder = new SystemIteratorEnvironmentImpl.Builder(tablet.getContext()) - .withTopLevelIterators(new ArrayList<>()).withScope(IteratorScope.scan) - .withTableId(tablet.getExtent().tableId()) + .withScope(IteratorScope.scan).withTableId(tablet.getExtent().tableId()) .withAuthorizations(scanParams.getAuthorizations()); if (samplerConfig != null) { builder.withSamplingEnabled(); diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Scanner.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Scanner.java index 9e2a7c7af03..06dbca07b4e 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Scanner.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Scanner.java @@ -19,7 +19,7 @@ package org.apache.accumulo.tserver.tablet; import java.io.IOException; -import java.util.ArrayList; +import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.locks.ReentrantLock; @@ -142,7 +142,7 @@ private Pair readInternal() throws IOException, Tablet if (results.getResults() == null) { range = null; - return new Pair<>(new ScanBatch(new ArrayList<>(), false), dataSource); + return new Pair<>(new ScanBatch(List.of(), false), dataSource); } else if (results.getContinueKey() == null) { return new Pair<>(new ScanBatch(results.getResults(), false), dataSource); } else { diff --git a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java index 8798abde4c4..d8ecce2da38 100644 --- a/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java +++ b/server/tserver/src/main/java/org/apache/accumulo/tserver/tablet/Tablet.java @@ -1819,7 +1819,7 @@ public long getSplitCreationTime() { public void importMapFiles(long tid, Map fileMap, boolean setTime) throws IOException { Map entries = new HashMap<>(fileMap.size()); - List files = new ArrayList<>(); + List files = new ArrayList<>(fileMap.size()); for (Entry entry : fileMap.entrySet()) { entries.put(entry.getKey(), new DataFileValue(entry.getValue().estimatedSize, 0L)); @@ -1891,7 +1891,8 @@ public void importMapFiles(long tid, Map fileMap, boolea synchronized (this) { // only mark the bulk import a success if no exception was thrown - bulkImported.computeIfAbsent(tid, k -> new ArrayList<>()).addAll(fileMap.keySet()); + bulkImported.computeIfAbsent(tid, k -> new ArrayList<>(fileMap.size())) + .addAll(fileMap.keySet()); } if (isSplitPossible()) { @@ -1996,8 +1997,8 @@ Set beginClearingUnusedLogs() { Preconditions.checkState(logLock.isHeldByCurrentThread()); Set unusedLogs = new HashSet<>(); - ArrayList otherLogsCopy = new ArrayList<>(); - ArrayList currentLogsCopy = new ArrayList<>(); + ArrayList otherLogsCopy = new ArrayList<>(otherLogs.size()); + ArrayList currentLogsCopy = new ArrayList<>(currentLogs.size()); synchronized (this) { if (removingLogs) {