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

Reduce AbstractPrerequisite footprint

XMLWordPrintable

    • Icon: Improvement Improvement
    • Resolution: Done
    • Icon: Medium Medium
    • 8.0.10, 9.0.7, 10.0.4
    • None
    • parser

      The sizing of classes we use for tracking prerequisites leaves something to be desired:

      ***** Hotspot Layout Simulation (JDK 15, 32-bit model, 8-byte aligned)
      org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl$PhaseFinished object internals: 
      OFF  SZ                                                               TYPE DESCRIPTION                   VALUE 
       0   4                                                                    (object header: mark)         N/A 
       4   4                                                                    (object header: class)        N/A 
       8   1                                                            boolean AbstractPrerequisite.done     N/A 
       9   3                                                                    (alignment/padding gap)        
      12   4                                                   java.lang.Object AbstractPrerequisite.value    N/A 
      16   4   org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl AbstractPrerequisite.this$0   N/A 
      20   4   org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl PhaseFinished.this$0          N/A 
      Instance size: 24 bytes 
      Space losses: 3 bytes internal + 0 bytes external = 3 bytes total
      

      typically:

      ***** Hotspot Layout Simulation (JDK 15, 64-bit model, compressed references, compressed class pointers, 8-byte aligned) 
      org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl$PhaseFinished object internals: 
      OFF  SZ                                                               TYPE DESCRIPTION                   VALUE 
       0   8                                                                    (object header: mark)         N/A 
       8   4                                                                    (object header: class)        N/A 
      12   1                                                            boolean AbstractPrerequisite.done     N/A 
      13   3                                                                    (alignment/padding gap)        
      16   4                                                   java.lang.Object AbstractPrerequisite.value    N/A 
      20   4   org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl AbstractPrerequisite.this$0   N/A 
      24   4   org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl PhaseFinished.this$0          N/A 
      28   4                                                                    (object alignment gap)         
      Instance size: 32 bytes 
      Space losses: 3 bytes internal + 4 bytes external = 7 bytes total

      and also:

      ***** Hotspot Layout Simulation (JDK 15, 64-bit model, 8-byte aligned) 
      org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl$PhaseFinished object internals: 
      OFF  SZ                                                               TYPE DESCRIPTION                   VALUE 
       0   8                                                                    (object header: mark)         N/A 
       8   8                                                                    (object header: class)        N/A 
      16   1                                                            boolean AbstractPrerequisite.done     N/A 
      17   7                                                                    (alignment/padding gap)        
      24   8                                                   java.lang.Object AbstractPrerequisite.value    N/A 
      32   8   org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl AbstractPrerequisite.this$0   N/A 
      40   8   org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl PhaseFinished.this$0          N/A 
      Instance size: 48 bytes 
      Space losses: 7 bytes internal + 0 bytes external = 7 bytes total

      This gets even worse in other classes:

      ***** Hotspot Layout Simulation (JDK 15, 64-bit model, 8-byte aligned) 
      org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl$PhaseModificationInNamespacePath object internals: 
      OFF  SZ                                                                   TYPE DESCRIPTION                               VALUE 
       0   8                                                                        (object header: mark)                     N/A 
       8   8                                                                        (object header: class)                    N/A 
      16   1                                                                boolean AbstractPrerequisite.done                 N/A 
      17   7                                                                        (alignment/padding gap)                    
      24   8                                                       java.lang.Object AbstractPrerequisite.value                N/A 
      32   8       org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl AbstractPrerequisite.this$0               N/A 
      40   8   org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase AbstractPathPrerequisite.modPhase         N/A 
      48   8                                                     java.lang.Iterable AbstractPathPrerequisite.keys             N/A 
      56   8                                                     java.util.Iterator AbstractPathPrerequisite.it               N/A 
      64   8       org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl AbstractPathPrerequisite.this$0           N/A 
      72   8       org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl PhaseModificationInNamespacePath.this$0   N/A 
      Instance size: 80 bytes 
      Space losses: 7 bytes internal + 0 bytes external = 7 bytes total

      The problem is we are using or three fields to track the same outer object reference (".this$0").

      Using an explicit field, passing it through constructors and making the classes static results in:

      ***** Hotspot Layout Simulation (JDK 15, 64-bit model, compressed references, compressed class pointers, 8-byte aligned) 
      org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl$PhaseFinished object internals: 
      OFF  SZ                                                               TYPE DESCRIPTION                     VALUE 
       0   8                                                                    (object header: mark)           N/A 
       8   4                                                                    (object header: class)          N/A 
      12   1                                                            boolean AbstractPrerequisite.done       N/A 
      13   3                                                                    (alignment/padding gap)          
      16   4   org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl AbstractPrerequisite.modifier   N/A 
      20   4                                                   java.lang.Object AbstractPrerequisite.value      N/A 
      Instance size: 24 bytes 
      Space losses: 3 bytes internal + 0 bytes external = 3 bytes total

      which the same size as 32bit, an improvement of 8 bytes/25%

       

      ***** Hotspot Layout Simulation (JDK 15, 64-bit model, 8-byte aligned) 
      org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl$PhaseFinished object internals: 
      OFF  SZ                                                               TYPE DESCRIPTION                     VALUE 
       0   8                                                                    (object header: mark)           N/A 
       8   8                                                                    (object header: class)          N/A 
      16   1                                                            boolean AbstractPrerequisite.done       N/A 
      17   7                                                                    (alignment/padding gap)          
      24   8   org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl AbstractPrerequisite.modifier   N/A 
      32   8                                                   java.lang.Object AbstractPrerequisite.value      N/A 
      Instance size: 40 bytes 
      Space losses: 7 bytes internal + 0 bytes external = 7 bytes total

      improvement of 8 bytes/16%

       

      ***** Hotspot Layout Simulation (JDK 15, 64-bit model, 8-byte aligned) 
      org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl$PhaseModificationInNamespacePath object internals: 
      OFF  SZ                                                                   TYPE DESCRIPTION                         VALUE 
       0   8                                                                        (object header: mark)               N/A 
       8   8                                                                        (object header: class)              N/A 
      16   1                                                                boolean AbstractPrerequisite.done           N/A 
      17   7                                                                        (alignment/padding gap)              
      24   8       org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl AbstractPrerequisite.modifier       N/A 
      32   8                                                       java.lang.Object AbstractPrerequisite.value          N/A 
      40   8   org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase AbstractPathPrerequisite.modPhase   N/A 
      48   8                                                     java.lang.Iterable AbstractPathPrerequisite.keys       N/A 
      56   8                                                     java.util.Iterator AbstractPathPrerequisite.it         N/A 
      Instance size: 64 bytes 
      Space losses: 7 bytes internal + 0 bytes external = 7 bytes total

      improvement of 16 bytes/20%

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

              Created:
              Updated:
              Resolved: