From a76e57da31e7e984006d14c8d5effb36468ec092 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 25 Feb 2015 12:24:36 +0100 Subject: [PATCH] Skip ArrayList instantiation during deserialization We use the ArrayList just as an index holder, after which we just extract the underlying array. The libraries by default perform a copy and then JIT has to prove what is going on to remove that overhead. Let's make it super-easy instead by filling the array ourselves. Change-Id: Ib48992538b3cd8a9a0c11011fe444e24b23dc825 Signed-off-by: Robert Varga --- .../binding/data/codec/impl/IdentifiableItemCodec.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/IdentifiableItemCodec.java b/code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/IdentifiableItemCodec.java index 47a24fb593..09231179d2 100644 --- a/code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/IdentifiableItemCodec.java +++ b/code-generator/binding-data-codec/src/main/java/org/opendaylight/yangtools/binding/data/codec/impl/IdentifiableItemCodec.java @@ -95,15 +95,17 @@ final class IdentifiableItemCodec implements Codec deserialize(final NodeIdentifierWithPredicates input) { - final ArrayList bindingValues = new ArrayList<>(keysInBindingOrder.size()); + final Object[] bindingValues = new Object[keysInBindingOrder.size()]; + int offset = 0; + for (final QName key : keysInBindingOrder) { final Object yangValue = input.getKeyValues().get(key); - bindingValues.add(keyValueContexts.get(key).deserialize(yangValue)); + bindingValues[offset++] = keyValueContexts.get(key).deserialize(yangValue); } final Identifier identifier; try { - identifier = (Identifier) ctorInvoker.invokeExact(ctor, bindingValues.toArray()); + identifier = (Identifier) ctorInvoker.invokeExact(ctor, bindingValues); } catch (Throwable e) { throw Throwables.propagate(e); } -- 2.36.6