BUG-6522: grow namespaces lazily 50/47550/2
authorRobert Varga <rovarga@cisco.com>
Tue, 25 Oct 2016 17:22:39 +0000 (19:22 +0200)
committerRobert Varga <nite@hq.sk>
Wed, 26 Oct 2016 08:41:16 +0000 (08:41 +0000)
NamespaceStorageSupport is the superclass of StatementContextBase,
hence allocating a default-sized HashMap results in ~75MiB wasted
space. Add lazy expansion to limit the overhead associated with
tracking these.

Change-Id: I0825aee92487c94421ef9e505152bbc5fc7383cb
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/NamespaceStorageSupport.java

index c9a9cde76265eb910d9b6cab302a5bc606b59cc9..c8ae51ea7618e179e1bdc593ac168f75bb766dc7 100644 (file)
@@ -22,7 +22,7 @@ import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
 
 abstract class NamespaceStorageSupport implements NamespaceStorageNode {
 
-    private final Map<Class<?>, Map<?,?>> namespaces = new HashMap<>();
+    private Map<Class<?>, Map<?,?>> namespaces = new HashMap<>();
 
     @Override
     public abstract NamespaceStorageNode getParentNamespaceStorage();
@@ -111,6 +111,10 @@ abstract class NamespaceStorageSupport implements NamespaceStorageNode {
         if (localNamespace == null) {
             checkLocalNamespaceAllowed(type);
             localNamespace = new HashMap<>(1);
+
+            if (namespaces.isEmpty()) {
+                namespaces = new HashMap<>(1);
+            }
             namespaces.put(type, localNamespace);
         }
         localNamespace.put(key,value);