From: Robert Varga Date: Fri, 15 May 2015 17:06:17 +0000 (+0200) Subject: Do not instantiate objects for hash values X-Git-Tag: release/beryllium~498 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=dbac4e92f0809cdf2610a402080c91406f6668c6;p=yangtools.git Do not instantiate objects for hash values While having a reference saves us from having an additional field, it will cost us an additional object overhead once it is materialized. Opt for a primitive type with a volatile guard. Change-Id: Ib3a71eb9d00555f3929d8bc104a5065d0252561e Signed-off-by: Robert Varga (cherry picked from commit 81bbf5f1a7c88c45969f48222dee635ad5e388fb) --- diff --git a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java index 4488ac32c2..7a7ce6c28a 100644 --- a/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java +++ b/yang/yang-data-api/src/main/java/org/opendaylight/yangtools/yang/data/api/YangInstanceIdentifier.java @@ -367,11 +367,10 @@ public final class YangInstanceIdentifier implements Path HASH_UPDATER = - AtomicReferenceFieldUpdater.newUpdater(AbstractPathArgument.class, Integer.class, "hash"); private static final long serialVersionUID = -4546547994250849340L; private final QName nodeType; - private volatile transient Integer hash = null; + private transient int hashValue; + private volatile transient boolean hashGuard = false; protected AbstractPathArgument(final QName nodeType) { this.nodeType = Preconditions.checkNotNull(nodeType); @@ -393,13 +392,12 @@ public final class YangInstanceIdentifier implements Path