-
Improvement
-
Resolution: Done
-
Medium
-
None
-
None
We are currently indexing namespaces as part of constructors, which is reducing our flexibility in implementation class design. For example, ContainerEffectiveStatementImpl looks like this:
# Running 64-bit HotSpot VM. # Using compressed oop with 3-bit shift. # Using compressed klass with 0x0000000800000000 base address and 3-bit shift. # Objects are 8 bytes aligned. # Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes] # Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes] ***** 32-bit VM: ********************************************************** org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ContainerEffectiveStatementImpl object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 8 (object header) N/A 8 4 com.google.common.collect.ImmutableMap DefaultWithDataTree.schemaTree N/A 12 4 com.google.common.collect.ImmutableMap DefaultWithDataTree.dataTree N/A 16 4 java.lang.Object DefaultWithDataTree.substatements N/A 20 4 org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement DefaultWithDataTree.declared N/A 24 4 com.google.common.collect.ImmutableMap WithTypedefNamespace.typedefNamespace N/A 28 4 int ContainerEffectiveStatementImpl.flags N/A 32 4 org.opendaylight.yangtools.yang.common.QName ContainerEffectiveStatementImpl.argument N/A 36 4 org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode ContainerEffectiveStatementImpl.original N/A Instance size: 40 bytes Space losses: 0 bytes internal + 0 bytes external = 0 bytes total ***** 64-bit VM: ********************************************************** org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ContainerEffectiveStatementImpl object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 16 (object header) N/A 16 8 com.google.common.collect.ImmutableMap DefaultWithDataTree.schemaTree N/A 24 8 com.google.common.collect.ImmutableMap DefaultWithDataTree.dataTree N/A 32 8 java.lang.Object DefaultWithDataTree.substatements N/A 40 8 org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement DefaultWithDataTree.declared N/A 48 8 com.google.common.collect.ImmutableMap WithTypedefNamespace.typedefNamespace N/A 56 4 int ContainerEffectiveStatementImpl.flags N/A 60 4 (alignment/padding gap) 64 8 org.opendaylight.yangtools.yang.common.QName ContainerEffectiveStatementImpl.argument N/A 72 8 org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode ContainerEffectiveStatementImpl.original N/A Instance size: 80 bytes Space losses: 4 bytes internal + 0 bytes external = 4 bytes total ***** 64-bit VM, compressed references enabled: *************************** org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ContainerEffectiveStatementImpl object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 12 (object header) N/A 12 4 com.google.common.collect.ImmutableMap DefaultWithDataTree.schemaTree N/A 16 4 com.google.common.collect.ImmutableMap DefaultWithDataTree.dataTree N/A 20 4 java.lang.Object DefaultWithDataTree.substatements N/A 24 4 org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement DefaultWithDataTree.declared N/A 28 4 com.google.common.collect.ImmutableMap WithTypedefNamespace.typedefNamespace N/A 32 4 int ContainerEffectiveStatementImpl.flags N/A 36 4 org.opendaylight.yangtools.yang.common.QName ContainerEffectiveStatementImpl.argument N/A 40 4 org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode ContainerEffectiveStatementImpl.original N/A 44 4 (loss due to the next object alignment) Instance size: 48 bytes Space losses: 0 bytes internal + 4 bytes external = 4 bytes total ***** 64-bit VM, compressed references enabled, 16-byte align: ************ org.opendaylight.yangtools.yang.model.ri.stmt.impl.eff.ContainerEffectiveStatementImpl object internals: OFFSET SIZE TYPE DESCRIPTION VALUE 0 12 (object header) N/A 12 4 com.google.common.collect.ImmutableMap DefaultWithDataTree.schemaTree N/A 16 4 com.google.common.collect.ImmutableMap DefaultWithDataTree.dataTree N/A 20 4 java.lang.Object DefaultWithDataTree.substatements N/A 24 4 org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement DefaultWithDataTree.declared N/A 28 4 com.google.common.collect.ImmutableMap WithTypedefNamespace.typedefNamespace N/A 32 4 int ContainerEffectiveStatementImpl.flags N/A 36 4 org.opendaylight.yangtools.yang.common.QName ContainerEffectiveStatementImpl.argument N/A 40 4 org.opendaylight.yangtools.yang.model.api.ContainerSchemaNode ContainerEffectiveStatementImpl.original N/A 44 4 (loss due to the next object alignment) Instance size: 48 bytes Space losses: 0 bytes internal + 4 bytes external = 4 bytes total
Here typedefNamespace is usually empty and we do not really use the namespace – it is a relatively new addition for object model completeness.
Eliminate the field, saving us 8 bytes in the usual cases – worth at least 517KiB in the Junos model case.
- split from
-
YANGTOOLS-1316 Re-examine argument storage in effective statements
- Resolved