From da9ee8c80328bd6e21064e44f95f29ffc1e99d41 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sun, 25 Nov 2018 18:23:50 +0100 Subject: [PATCH] Use pre-sized ImmutableLists for yang-data-api ImmutableList.builder() did not pre-size its arrays correctly, leading to poor performance. That is no longer the case and we can correctly pre-allocate it -- giving us the ArrayList equivalent in immutable form, hence skipping copying in {SchemaPath,YangInstanceIdentifier}.create() Change-Id: I4a070dca26138f28de69e4a0e1f9b0298ee2312b Signed-off-by: Robert Varga --- .../stream/NormalizedNodeInputStreamReader.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeInputStreamReader.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeInputStreamReader.java index 211f8b521f..2f9403707c 100755 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeInputStreamReader.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeInputStreamReader.java @@ -10,17 +10,16 @@ package org.opendaylight.controller.cluster.datastore.node.utils.stream; import com.google.common.base.Preconditions; import com.google.common.base.Strings; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; import java.io.DataInput; import java.io.IOException; import java.io.StringReader; import java.math.BigDecimal; import java.math.BigInteger; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import javax.xml.parsers.DocumentBuilderFactory; @@ -358,12 +357,12 @@ public class NormalizedNodeInputStreamReader implements NormalizedNodeDataInput final boolean absolute = input.readBoolean(); final int size = input.readInt(); - final Collection qnames = new ArrayList<>(size); + + final Builder qnames = ImmutableList.builderWithExpectedSize(size); for (int i = 0; i < size; ++i) { qnames.add(readQName()); } - - return SchemaPath.create(qnames, absolute); + return SchemaPath.create(qnames.build(), absolute); } @Override @@ -374,13 +373,11 @@ public class NormalizedNodeInputStreamReader implements NormalizedNodeDataInput private YangInstanceIdentifier readYangInstanceIdentifierInternal() throws IOException { int size = input.readInt(); - - List pathArguments = new ArrayList<>(size); - + final Builder pathArguments = ImmutableList.builderWithExpectedSize(size); for (int i = 0; i < size; i++) { pathArguments.add(readPathArgument()); } - return YangInstanceIdentifier.create(pathArguments); + return YangInstanceIdentifier.create(pathArguments.build()); } private Set readObjSet() throws IOException { -- 2.36.6