public final class jdk.nashorn.internal.ir.debug.ObjectSizeCalculator
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: jdk.nashorn.internal.ir.debug.ObjectSizeCalculator
  super_class: java.lang.Object
{
  private final int arrayHeaderSize;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int objectHeaderSize;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int objectPadding;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int referenceSize;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final int superclassFieldPadding;
    descriptor: I
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.Map<java.lang.Class<?>, jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo> classSizeInfos;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/Class<*>;Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$ClassSizeInfo;>;

  private final java.util.Map<java.lang.Object, java.lang.Object> alreadyVisited;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Object;>;

  private final java.util.Map<java.lang.Class<?>, jdk.nashorn.internal.ir.debug.ClassHistogramElement> histogram;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/Class<*>;Ljdk/nashorn/internal/ir/debug/ClassHistogramElement;>;

  private final java.util.Deque<java.lang.Object> pending;
    descriptor: Ljava/util/Deque;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Deque<Ljava/lang/Object;>;

  private long size;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  static java.lang.Class<?> managementFactory;
    descriptor: Ljava/lang/Class;
    flags: (0x0008) ACC_STATIC
    Signature: Ljava/lang/Class<*>;

  static java.lang.Class<?> memoryPoolMXBean;
    descriptor: Ljava/lang/Class;
    flags: (0x0008) ACC_STATIC
    Signature: Ljava/lang/Class<*>;

  static java.lang.Class<?> memoryUsage;
    descriptor: Ljava/lang/Class;
    flags: (0x0008) ACC_STATIC
    Signature: Ljava/lang/Class<*>;

  static java.lang.reflect.Method getMemoryPoolMXBeans;
    descriptor: Ljava/lang/reflect/Method;
    flags: (0x0008) ACC_STATIC

  static java.lang.reflect.Method getUsage;
    descriptor: Ljava/lang/reflect/Method;
    flags: (0x0008) ACC_STATIC

  static java.lang.reflect.Method getMax;
    descriptor: Ljava/lang/reflect/Method;
    flags: (0x0008) ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 373
            aconst_null
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.managementFactory:Ljava/lang/Class;
         1: .line 374
            aconst_null
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.memoryPoolMXBean:Ljava/lang/Class;
         2: .line 375
            aconst_null
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.memoryUsage:Ljava/lang/Class;
         3: .line 376
            aconst_null
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getMemoryPoolMXBeans:Ljava/lang/reflect/Method;
         4: .line 377
            aconst_null
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getUsage:Ljava/lang/reflect/Method;
         5: .line 378
            aconst_null
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getMax:Ljava/lang/reflect/Method;
         6: .line 381
            ldc "java.lang.management.ManagementFactory"
            invokestatic java.lang.Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.managementFactory:Ljava/lang/Class;
         7: .line 382
            ldc "java.lang.management.MemoryPoolMXBean"
            invokestatic java.lang.Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.memoryPoolMXBean:Ljava/lang/Class;
         8: .line 383
            ldc "java.lang.management.MemoryUsage"
            invokestatic java.lang.Class.forName:(Ljava/lang/String;)Ljava/lang/Class;
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.memoryUsage:Ljava/lang/Class;
         9: .line 385
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.managementFactory:Ljava/lang/Class;
            ldc "getMemoryPoolMXBeans"
            iconst_0
            anewarray java.lang.Class
            invokevirtual java.lang.Class.getMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getMemoryPoolMXBeans:Ljava/lang/reflect/Method;
        10: .line 386
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.memoryPoolMXBean:Ljava/lang/Class;
            ldc "getUsage"
            iconst_0
            anewarray java.lang.Class
            invokevirtual java.lang.Class.getMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getUsage:Ljava/lang/reflect/Method;
        11: .line 387
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.memoryUsage:Ljava/lang/Class;
            ldc "getMax"
            iconst_0
            anewarray java.lang.Class
            invokevirtual java.lang.Class.getMethod:(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
            putstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getMax:Ljava/lang/reflect/Method;
        12: .line 388
            goto 14
      StackMap locals:
      StackMap stack: java.lang.Exception
        13: pop
        14: .line 391
      StackMap locals:
      StackMap stack:
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           6    12      13  Class java.lang.ClassNotFoundException
           6    12      13  Class java.lang.NoSuchMethodException
           6    12      13  Class java.lang.SecurityException

  public static long getObjectSize(java.lang.Object);
    descriptor: (Ljava/lang/Object;)J
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.lang.Object obj
         0: .line 122
            aload 0 /* obj */
            ifnonnull 1
            lconst_0
            goto 2
      StackMap locals:
      StackMap stack:
         1: new jdk.nashorn.internal.ir.debug.ObjectSizeCalculator
            dup
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$CurrentLayout.SPEC:Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$MemoryLayoutSpecification;
            invokespecial jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.<init>:(Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$MemoryLayoutSpecification;)V
            aload 0 /* obj */
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.calculateObjectSize:(Ljava/lang/Object;)J
      StackMap locals:
      StackMap stack: long
         2: lreturn
        end local 0 // java.lang.Object obj
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0   obj  Ljava/lang/Object;
    Exceptions:
      throws java.lang.UnsupportedOperationException
    MethodParameters:
      Name  Flags
      obj   final

  public void <init>(jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification);
    descriptor: (Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$MemoryLayoutSpecification;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
        start local 1 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification memoryLayoutSpecification
         0: .line 153
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 138
            aload 0 /* this */
            new java.util.IdentityHashMap
            dup
            invokespecial java.util.IdentityHashMap.<init>:()V
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.classSizeInfos:Ljava/util/Map;
         2: .line 141
            aload 0 /* this */
            new java.util.IdentityHashMap
            dup
            invokespecial java.util.IdentityHashMap.<init>:()V
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.alreadyVisited:Ljava/util/Map;
         3: .line 142
            aload 0 /* this */
            new java.util.IdentityHashMap
            dup
            invokespecial java.util.IdentityHashMap.<init>:()V
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.histogram:Ljava/util/Map;
         4: .line 144
            aload 0 /* this */
            new java.util.ArrayDeque
            dup
            sipush 16384
            invokespecial java.util.ArrayDeque.<init>:(I)V
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.pending:Ljava/util/Deque;
         5: .line 154
            aload 1 /* memoryLayoutSpecification */
            invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 155
            aload 0 /* this */
            aload 1 /* memoryLayoutSpecification */
            invokeinterface jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification.getArrayHeaderSize:()I
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.arrayHeaderSize:I
         7: .line 156
            aload 0 /* this */
            aload 1 /* memoryLayoutSpecification */
            invokeinterface jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification.getObjectHeaderSize:()I
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.objectHeaderSize:I
         8: .line 157
            aload 0 /* this */
            aload 1 /* memoryLayoutSpecification */
            invokeinterface jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification.getObjectPadding:()I
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.objectPadding:I
         9: .line 158
            aload 0 /* this */
            aload 1 /* memoryLayoutSpecification */
            invokeinterface jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification.getReferenceSize:()I
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.referenceSize:I
        10: .line 159
            aload 0 /* this */
            aload 1 /* memoryLayoutSpecification */
            invokeinterface jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification.getSuperclassFieldPadding:()I
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.superclassFieldPadding:I
        11: .line 160
            return
        end local 1 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification memoryLayoutSpecification
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot                       Name  Signature
            0   12     0                       this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
            0   12     1  memoryLayoutSpecification  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$MemoryLayoutSpecification;
    MethodParameters:
                           Name  Flags
      memoryLayoutSpecification  final

  public synchronized long calculateObjectSize(java.lang.Object);
    descriptor: (Ljava/lang/Object;)J
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
        start local 1 // java.lang.Object obj
         0: .line 179
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.histogram:Ljava/util/Map;
            invokeinterface java.util.Map.clear:()V
         1: .line 181
            aload 1 /* obj */
            astore 2 /* o */
        start local 2 // java.lang.Object o
         2: .line 182
      StackMap locals: java.lang.Object
      StackMap stack:
            aload 0 /* this */
            aload 2 /* o */
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.visit:(Ljava/lang/Object;)V
         3: .line 183
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.pending:Ljava/util/Deque;
            invokeinterface java.util.Deque.isEmpty:()Z
            ifeq 9
         4: .line 184
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.size:J
            lstore 4
         5: .line 189
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.alreadyVisited:Ljava/util/Map;
            invokeinterface java.util.Map.clear:()V
         6: .line 190
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.pending:Ljava/util/Deque;
            invokeinterface java.util.Deque.clear:()V
         7: .line 191
            aload 0 /* this */
            lconst_0
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.size:J
         8: .line 184
            lload 4
            lreturn
         9: .line 186
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.pending:Ljava/util/Deque;
            invokeinterface java.util.Deque.removeFirst:()Ljava/lang/Object;
            astore 2 /* o */
        10: .line 181
            goto 2
        end local 2 // java.lang.Object o
        11: .line 188
      StackMap locals: jdk.nashorn.internal.ir.debug.ObjectSizeCalculator java.lang.Object
      StackMap stack: java.lang.Throwable
            astore 3
        12: .line 189
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.alreadyVisited:Ljava/util/Map;
            invokeinterface java.util.Map.clear:()V
        13: .line 190
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.pending:Ljava/util/Deque;
            invokeinterface java.util.Deque.clear:()V
        14: .line 191
            aload 0 /* this */
            lconst_0
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.size:J
        15: .line 192
            aload 3
            athrow
        end local 1 // java.lang.Object obj
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   16     0  this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
            0   16     1   obj  Ljava/lang/Object;
            2   11     2     o  Ljava/lang/Object;
      Exception table:
        from    to  target  type
           1     5      11  any
           9    11      11  any
    MethodParameters:
      Name  Flags
      obj   final

  public java.util.List<jdk.nashorn.internal.ir.debug.ClassHistogramElement> getClassHistogram();
    descriptor: ()Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
         0: .line 200
            new java.util.ArrayList
            dup
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.histogram:Ljava/util/Map;
            invokeinterface java.util.Map.values:()Ljava/util/Collection;
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            areturn
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
    Signature: ()Ljava/util/List<Ljdk/nashorn/internal/ir/debug/ClassHistogramElement;>;

  private jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo getClassSizeInfo(java.lang.Class<?>);
    descriptor: (Ljava/lang/Class;)Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$ClassSizeInfo;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
        start local 1 // java.lang.Class clazz
         0: .line 204
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.classSizeInfos:Ljava/util/Map;
            aload 1 /* clazz */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo
            astore 2 /* csi */
        start local 2 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo csi
         1: .line 205
            aload 2 /* csi */
            ifnonnull 4
         2: .line 206
            new jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo
            dup
            aload 0 /* this */
            aload 1 /* clazz */
            invokespecial jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo.<init>:(Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;Ljava/lang/Class;)V
            astore 2 /* csi */
         3: .line 207
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.classSizeInfos:Ljava/util/Map;
            aload 1 /* clazz */
            aload 2 /* csi */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 209
      StackMap locals: jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo
      StackMap stack:
            aload 2 /* csi */
            areturn
        end local 2 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo csi
        end local 1 // java.lang.Class clazz
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    5     0   this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
            0    5     1  clazz  Ljava/lang/Class<*>;
            1    5     2    csi  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$ClassSizeInfo;
    Signature: (Ljava/lang/Class<*>;)Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$ClassSizeInfo;
    MethodParameters:
       Name  Flags
      clazz  final

  private void visit(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
        start local 1 // java.lang.Object obj
         0: .line 213
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.alreadyVisited:Ljava/util/Map;
            aload 1 /* obj */
            invokeinterface java.util.Map.containsKey:(Ljava/lang/Object;)Z
            ifeq 2
         1: .line 214
            return
         2: .line 216
      StackMap locals:
      StackMap stack:
            aload 1 /* obj */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            astore 2 /* clazz */
        start local 2 // java.lang.Class clazz
         3: .line 217
            aload 2 /* clazz */
            ldc Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$ArrayElementsVisitor;
            if_acmpne 6
         4: .line 218
            aload 1 /* obj */
            checkcast jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ArrayElementsVisitor
            aload 0 /* this */
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ArrayElementsVisitor.visit:(Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;)V
         5: .line 219
            goto 11
         6: .line 220
      StackMap locals: java.lang.Class
      StackMap stack:
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.alreadyVisited:Ljava/util/Map;
            aload 1 /* obj */
            aload 1 /* obj */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 221
            aload 2 /* clazz */
            invokevirtual java.lang.Class.isArray:()Z
            ifeq 10
         8: .line 222
            aload 0 /* this */
            aload 1 /* obj */
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.visitArray:(Ljava/lang/Object;)V
         9: .line 223
            goto 11
        10: .line 224
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 2 /* clazz */
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getClassSizeInfo:(Ljava/lang/Class;)Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$ClassSizeInfo;
            aload 1 /* obj */
            aload 0 /* this */
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo.visit:(Ljava/lang/Object;Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;)V
        11: .line 227
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.Class clazz
        end local 1 // java.lang.Object obj
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   12     0   this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
            0   12     1    obj  Ljava/lang/Object;
            3   12     2  clazz  Ljava/lang/Class<*>;
    MethodParameters:
      Name  Flags
      obj   final

  private void visitArray(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
        start local 1 // java.lang.Object array
         0: .line 230
            aload 1 /* array */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            astore 2 /* arrayClass */
        start local 2 // java.lang.Class arrayClass
         1: .line 231
            aload 2 /* arrayClass */
            invokevirtual java.lang.Class.getComponentType:()Ljava/lang/Class;
            astore 3 /* componentType */
        start local 3 // java.lang.Class componentType
         2: .line 232
            aload 1 /* array */
            invokestatic java.lang.reflect.Array.getLength:(Ljava/lang/Object;)I
            istore 4 /* length */
        start local 4 // int length
         3: .line 233
            aload 3 /* componentType */
            invokevirtual java.lang.Class.isPrimitive:()Z
            ifeq 6
         4: .line 234
            aload 0 /* this */
            aload 2 /* arrayClass */
            iload 4 /* length */
            aload 3 /* componentType */
            invokestatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getPrimitiveFieldSize:(Ljava/lang/Class;)J
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.increaseByArraySize:(Ljava/lang/Class;IJ)V
         5: .line 235
            goto 12
         6: .line 236
      StackMap locals: java.lang.Class java.lang.Class int
      StackMap stack:
            aload 0 /* this */
            aload 2 /* arrayClass */
            iload 4 /* length */
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.referenceSize:I
            i2l
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.increaseByArraySize:(Ljava/lang/Class;IJ)V
         7: .line 243
            iload 4 /* length */
            tableswitch { // 0 - 1
                    0: 8
                    1: 9
              default: 11
          }
         8: .line 245
      StackMap locals:
      StackMap stack:
            goto 12
         9: .line 248
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* array */
            iconst_0
            invokestatic java.lang.reflect.Array.get:(Ljava/lang/Object;I)Ljava/lang/Object;
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.enqueue:(Ljava/lang/Object;)V
        10: .line 249
            goto 12
        11: .line 252
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            new jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ArrayElementsVisitor
            dup
            aload 1 /* array */
            checkcast java.lang.Object[]
            invokespecial jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ArrayElementsVisitor.<init>:([Ljava/lang/Object;)V
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.enqueue:(Ljava/lang/Object;)V
        12: .line 256
      StackMap locals:
      StackMap stack:
            return
        end local 4 // int length
        end local 3 // java.lang.Class componentType
        end local 2 // java.lang.Class arrayClass
        end local 1 // java.lang.Object array
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   13     0           this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
            0   13     1          array  Ljava/lang/Object;
            1   13     2     arrayClass  Ljava/lang/Class<*>;
            2   13     3  componentType  Ljava/lang/Class<*>;
            3   13     4         length  I
    MethodParameters:
       Name  Flags
      array  final

  private void increaseByArraySize(java.lang.Class<?>, int, );
    descriptor: (Ljava/lang/Class;IJ)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=8, locals=5, args_size=4
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
        start local 1 // java.lang.Class clazz
        start local 2 // int length
        start local 3 // long elementSize
         0: .line 259
            aload 0 /* this */
            aload 1 /* clazz */
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.arrayHeaderSize:I
            i2l
            iload 2 /* length */
            i2l
            lload 3 /* elementSize */
            lmul
            ladd
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.objectPadding:I
            invokestatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.roundTo:(JI)J
            invokevirtual jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.increaseSize:(Ljava/lang/Class;J)V
         1: .line 260
            return
        end local 3 // long elementSize
        end local 2 // int length
        end local 1 // java.lang.Class clazz
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    2     0         this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
            0    2     1        clazz  Ljava/lang/Class<*>;
            0    2     2       length  I
            0    2     3  elementSize  J
    Signature: (Ljava/lang/Class<*>;IJ)V
    MethodParameters:
             Name  Flags
      clazz        final
      length       final
      elementSize  final

  void enqueue(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
        start local 1 // java.lang.Object obj
         0: .line 279
            aload 1 /* obj */
            ifnull 2
         1: .line 280
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.pending:Ljava/util/Deque;
            aload 1 /* obj */
            invokeinterface java.util.Deque.addLast:(Ljava/lang/Object;)V
         2: .line 282
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Object obj
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
            0    3     1   obj  Ljava/lang/Object;
    MethodParameters:
      Name  Flags
      obj   final

  void increaseSize(java.lang.Class<?>, );
    descriptor: (Ljava/lang/Class;J)V
    flags: (0x0000) 
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
        start local 1 // java.lang.Class clazz
        start local 2 // long objectSize
         0: .line 285
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.histogram:Ljava/util/Map;
            aload 1 /* clazz */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast jdk.nashorn.internal.ir.debug.ClassHistogramElement
            astore 4 /* he */
        start local 4 // jdk.nashorn.internal.ir.debug.ClassHistogramElement he
         1: .line 286
            aload 4 /* he */
            ifnonnull 4
         2: .line 287
            new jdk.nashorn.internal.ir.debug.ClassHistogramElement
            dup
            aload 1 /* clazz */
            invokespecial jdk.nashorn.internal.ir.debug.ClassHistogramElement.<init>:(Ljava/lang/Class;)V
            astore 4 /* he */
         3: .line 288
            aload 0 /* this */
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.histogram:Ljava/util/Map;
            aload 1 /* clazz */
            aload 4 /* he */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 290
      StackMap locals: jdk.nashorn.internal.ir.debug.ClassHistogramElement
      StackMap stack:
            aload 4 /* he */
            lload 2 /* objectSize */
            invokevirtual jdk.nashorn.internal.ir.debug.ClassHistogramElement.addInstance:(J)V
         5: .line 291
            aload 0 /* this */
            dup
            getfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.size:J
            lload 2 /* objectSize */
            ladd
            putfield jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.size:J
         6: .line 292
            return
        end local 4 // jdk.nashorn.internal.ir.debug.ClassHistogramElement he
        end local 2 // long objectSize
        end local 1 // java.lang.Class clazz
        end local 0 // jdk.nashorn.internal.ir.debug.ObjectSizeCalculator this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator;
            0    7     1       clazz  Ljava/lang/Class<*>;
            0    7     2  objectSize  J
            1    7     4          he  Ljdk/nashorn/internal/ir/debug/ClassHistogramElement;
    Signature: (Ljava/lang/Class<*>;J)V
    MethodParameters:
            Name  Flags
      clazz       final
      objectSize  final

  static long roundTo(long, int);
    descriptor: (JI)J
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // long x
        start local 2 // int multiple
         0: .line 295
            lload 0 /* x */
            iload 2 /* multiple */
            i2l
            ladd
            lconst_1
            lsub
            iload 2 /* multiple */
            i2l
            ldiv
            iload 2 /* multiple */
            i2l
            lmul
            lreturn
        end local 2 // int multiple
        end local 0 // long x
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0         x  J
            0    1     2  multiple  I
    MethodParameters:
          Name  Flags
      x         final
      multiple  final

  private static long getPrimitiveFieldSize(java.lang.Class<?>);
    descriptor: (Ljava/lang/Class;)J
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // java.lang.Class type
         0: .line 354
            aload 0 /* type */
            getstatic java.lang.Boolean.TYPE:Ljava/lang/Class;
            if_acmpeq 1
            aload 0 /* type */
            getstatic java.lang.Byte.TYPE:Ljava/lang/Class;
            if_acmpne 2
         1: .line 355
      StackMap locals:
      StackMap stack:
            lconst_1
            lreturn
         2: .line 357
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            getstatic java.lang.Character.TYPE:Ljava/lang/Class;
            if_acmpeq 3
            aload 0 /* type */
            getstatic java.lang.Short.TYPE:Ljava/lang/Class;
            if_acmpne 4
         3: .line 358
      StackMap locals:
      StackMap stack:
            ldc 2
            lreturn
         4: .line 360
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            getstatic java.lang.Integer.TYPE:Ljava/lang/Class;
            if_acmpeq 5
            aload 0 /* type */
            getstatic java.lang.Float.TYPE:Ljava/lang/Class;
            if_acmpne 6
         5: .line 361
      StackMap locals:
      StackMap stack:
            ldc 4
            lreturn
         6: .line 363
      StackMap locals:
      StackMap stack:
            aload 0 /* type */
            getstatic java.lang.Long.TYPE:Ljava/lang/Class;
            if_acmpeq 7
            aload 0 /* type */
            getstatic java.lang.Double.TYPE:Ljava/lang/Class;
            if_acmpne 8
         7: .line 364
      StackMap locals:
      StackMap stack:
            ldc 8
            lreturn
         8: .line 366
      StackMap locals:
      StackMap stack:
            new java.lang.AssertionError
            dup
            new java.lang.StringBuilder
            dup
            ldc "Encountered unexpected primitive type "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         9: .line 367
            aload 0 /* type */
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        10: .line 366
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        end local 0 // java.lang.Class type
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   11     0  type  Ljava/lang/Class<*>;
    Signature: (Ljava/lang/Class<*>;)J
    MethodParameters:
      Name  Flags
      type  final

  public static jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification getEffectiveMemoryLayoutSpecification();
    descriptor: ()Ljdk/nashorn/internal/ir/debug/ObjectSizeCalculator$MemoryLayoutSpecification;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=11, args_size=0
         0: .line 398
            ldc "java.vm.name"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 0 /* vmName */
        start local 0 // java.lang.String vmName
         1: .line 399
            aload 0 /* vmName */
            ifnull 2
            aload 0 /* vmName */
            ldc "Java HotSpot(TM) "
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifne 5
         2: .line 400
      StackMap locals: java.lang.String
      StackMap stack:
            new java.lang.UnsupportedOperationException
            dup
         3: .line 401
            ldc "ObjectSizeCalculator only supported on HotSpot VM"
         4: .line 400
            invokespecial java.lang.UnsupportedOperationException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 404
      StackMap locals:
      StackMap stack:
            ldc "sun.arch.data.model"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 1 /* dataModel */
        start local 1 // java.lang.String dataModel
         6: .line 405
            ldc "32"
            aload 1 /* dataModel */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 8
         7: .line 407
            new jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$1
            dup
            invokespecial jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$1.<init>:()V
            areturn
         8: .line 424
      StackMap locals: java.lang.String
      StackMap stack:
            ldc "64"
            aload 1 /* dataModel */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 12
         9: .line 425
            new java.lang.UnsupportedOperationException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Unrecognized value '"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        10: .line 426
            aload 1 /* dataModel */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "' of sun.arch.data.model system property"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
        11: .line 425
            invokespecial java.lang.UnsupportedOperationException.<init>:(Ljava/lang/String;)V
            athrow
        12: .line 429
      StackMap locals:
      StackMap stack:
            ldc "java.vm.version"
            invokestatic java.lang.System.getProperty:(Ljava/lang/String;)Ljava/lang/String;
            astore 2 /* strVmVersion */
        start local 2 // java.lang.String strVmVersion
        13: .line 430
            aload 2 /* strVmVersion */
            iconst_0
        14: .line 431
            aload 2 /* strVmVersion */
            bipush 46
            invokevirtual java.lang.String.indexOf:(I)I
        15: .line 430
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            invokestatic java.lang.Integer.parseInt:(Ljava/lang/String;)I
            istore 3 /* vmVersion */
        start local 3 // int vmVersion
        16: .line 432
            iload 3 /* vmVersion */
            bipush 17
            if_icmplt 32
        17: .line 433
            lconst_0
            lstore 4 /* maxMemory */
        start local 4 // long maxMemory
        18: .line 444
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getMemoryPoolMXBeans:Ljava/lang/reflect/Method;
            ifnonnull 20
        19: .line 445
            new java.lang.AssertionError
            dup
            ldc "java.lang.management not available in compact 1"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        20: .line 449
      StackMap locals: java.lang.String int long
      StackMap stack:
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getMemoryPoolMXBeans:Ljava/lang/reflect/Method;
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.managementFactory:Ljava/lang/Class;
            iconst_0
            anewarray java.lang.Object
            invokevirtual java.lang.reflect.Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.List
            astore 6 /* memoryPoolMXBeans */
        start local 6 // java.util.List memoryPoolMXBeans
        21: .line 450
            aload 6 /* memoryPoolMXBeans */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 8
            goto 26
      StackMap locals: java.lang.String java.lang.String java.lang.String int long java.util.List top java.util.Iterator
      StackMap stack:
        22: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            astore 7 /* mp */
        start local 7 // java.lang.Object mp
        23: .line 451
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getUsage:Ljava/lang/reflect/Method;
            aload 7 /* mp */
            iconst_0
            anewarray java.lang.Object
            invokevirtual java.lang.reflect.Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            astore 9 /* usage */
        start local 9 // java.lang.Object usage
        24: .line 452
            getstatic jdk.nashorn.internal.ir.debug.ObjectSizeCalculator.getMax:Ljava/lang/reflect/Method;
            aload 9 /* usage */
            iconst_0
            anewarray java.lang.Object
            invokevirtual java.lang.reflect.Method.invoke:(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
            astore 10 /* max */
        start local 10 // java.lang.Object max
        25: .line 453
            lload 4 /* maxMemory */
            aload 10 /* max */
            checkcast java.lang.Long
            invokevirtual java.lang.Long.longValue:()J
            ladd
            lstore 4 /* maxMemory */
        end local 10 // java.lang.Object max
        end local 9 // java.lang.Object usage
        end local 7 // java.lang.Object mp
        26: .line 450
      StackMap locals:
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 22
        end local 6 // java.util.List memoryPoolMXBeans
        27: .line 455
            goto 30
        28: .line 457
      StackMap locals: java.lang.String java.lang.String java.lang.String int long
      StackMap stack: java.lang.Exception
            pop
        29: .line 458
            new java.lang.AssertionError
            dup
            ldc "java.lang.management not available in compact 1"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        30: .line 461
      StackMap locals:
      StackMap stack:
            lload 4 /* maxMemory */
            ldc 32212254720
            lcmp
            ifge 32
        31: .line 464
            new jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$2
            dup
            invokespecial jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$2.<init>:()V
            areturn
        end local 4 // long maxMemory
        32: .line 485
      StackMap locals:
      StackMap stack:
            new jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$3
            dup
            invokespecial jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$3.<init>:()V
            areturn
        end local 3 // int vmVersion
        end local 2 // java.lang.String strVmVersion
        end local 1 // java.lang.String dataModel
        end local 0 // java.lang.String vmName
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            1   33     0             vmName  Ljava/lang/String;
            6   33     1          dataModel  Ljava/lang/String;
           13   33     2       strVmVersion  Ljava/lang/String;
           16   33     3          vmVersion  I
           18   32     4          maxMemory  J
           21   27     6  memoryPoolMXBeans  Ljava/util/List<*>;
           23   26     7                 mp  Ljava/lang/Object;
           24   26     9              usage  Ljava/lang/Object;
           25   26    10                max  Ljava/lang/Object;
      Exception table:
        from    to  target  type
          20    27      28  Class java.lang.IllegalAccessException
          20    27      28  Class java.lang.IllegalArgumentException
          20    27      28  Class java.lang.reflect.InvocationTargetException
}
SourceFile: "ObjectSizeCalculator.java"
NestMembers:
  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$1  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$2  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$3  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ArrayElementsVisitor  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$CurrentLayout  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification
InnerClasses:
  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$1
  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$2
  jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$3
  private ArrayElementsVisitor = jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ArrayElementsVisitor of jdk.nashorn.internal.ir.debug.ObjectSizeCalculator
  private ClassSizeInfo = jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$ClassSizeInfo of jdk.nashorn.internal.ir.debug.ObjectSizeCalculator
  private CurrentLayout = jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$CurrentLayout of jdk.nashorn.internal.ir.debug.ObjectSizeCalculator
  public abstract MemoryLayoutSpecification = jdk.nashorn.internal.ir.debug.ObjectSizeCalculator$MemoryLayoutSpecification of jdk.nashorn.internal.ir.debug.ObjectSizeCalculator