From 8a524457d78e932a4de301a9cdacf46c1f2531b2 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Mon, 9 Nov 2015 18:44:52 +0100 Subject: [PATCH] Lower SchemaPath#getPath() memory overhead Acquiring forward path involves performing a reverse() on an ImmutableList -- which results in an proxy object being created. Each such object costs 24 bytes, leading to ~120K wasted memory on a freshly-booted up BGP+OF instance. Eliminate this overhead by instantiating a temporary ArrayList and copying its reverse view. This way only a single object is retained. Change-Id: If3b193e84f0f7ffc17997360ae5b02669c119321 Signed-off-by: Robert Varga --- .../opendaylight/yangtools/yang/model/api/SchemaPath.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java index 9601a3910f..fd4466d034 100644 --- a/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java +++ b/yang/yang-model-api/src/main/java/org/opendaylight/yangtools/yang/model/api/SchemaPath.java @@ -12,7 +12,9 @@ import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.google.common.collect.UnmodifiableIterator; +import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; @@ -121,7 +123,11 @@ public abstract class SchemaPath implements Immutable { private ImmutableList getLegacyPath() { ImmutableList ret = legacyPath; if (ret == null) { - ret = ImmutableList.copyOf(getPathTowardsRoot()).reverse(); + final List tmp = new ArrayList<>(); + for (QName qname : getPathTowardsRoot()) { + tmp.add(qname); + } + ret = ImmutableList.copyOf(Lists.reverse(tmp)); LEGACYPATH_UPDATER.lazySet(this, ret); } -- 2.36.6