Uploaded image for project: 'yangtools'
  1. yangtools
  2. YANGTOOLS-1375

Implement TypedefNamespace as a linear search

XMLWordPrintable

    • Icon: Improvement Improvement
    • Resolution: Done
    • Icon: Medium Medium
    • 8.0.0
    • None
    • model-spi
    • 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.

       

            rovarga Robert Varga
            rovarga Robert Varga
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: