public abstract class com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter<T extends com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition> implements com.oracle.svm.core.image.ImageHeapLayouter
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter
  super_class: java.lang.Object
{
  private static final int READ_ONLY_PRIMITIVE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int READ_ONLY_REFERENCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final int READ_ONLY_RELOCATABLE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final int WRITABLE_PRIMITIVE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  private static final int WRITABLE_REFERENCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  private static final int WRITABLE_HUGE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 5

  private static final int READ_ONLY_HUGE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 6

  private static final int PARTITION_COUNT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 7

  private final T[] partitions;
    descriptor: [Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: [TT;

  static final boolean $assertionsDisabled;
    descriptor: Z
    flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 40
            ldc Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter;
            invokevirtual java.lang.Class.desiredAssertionStatus:()Z
            ifne 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: putstatic com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.$assertionsDisabled:Z
         3: .line 71
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public T[] getPartitions();
    descriptor: ()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 77
            aload 0 /* this */
            getfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            areturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
    Signature: ()[TT;

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 80
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 81
            aload 0 /* this */
            aload 0 /* this */
            bipush 7
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.createPartitionsArray:(I)[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            putfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
         2: .line 82
            aload 0 /* this */
            getfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_0
            aload 0 /* this */
            ldc "readOnlyPrimitive"
            iconst_0
            iconst_0
            iconst_0
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.createPartition:(Ljava/lang/String;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            aastore
         3: .line 83
            aload 0 /* this */
            getfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_1
            aload 0 /* this */
            ldc "readOnlyReference"
            iconst_1
            iconst_0
            iconst_0
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.createPartition:(Ljava/lang/String;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            aastore
         4: .line 84
            aload 0 /* this */
            getfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_2
            aload 0 /* this */
            ldc "readOnlyRelocatable"
            iconst_1
            iconst_0
            iconst_0
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.createPartition:(Ljava/lang/String;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            aastore
         5: .line 85
            aload 0 /* this */
            getfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_3
            aload 0 /* this */
            ldc "writablePrimitive"
            iconst_0
            iconst_1
            iconst_0
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.createPartition:(Ljava/lang/String;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            aastore
         6: .line 86
            aload 0 /* this */
            getfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_4
            aload 0 /* this */
            ldc "writableReference"
            iconst_1
            iconst_1
            iconst_0
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.createPartition:(Ljava/lang/String;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            aastore
         7: .line 87
            aload 0 /* this */
            getfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_5
            aload 0 /* this */
            ldc "writableHuge"
            iconst_1
            iconst_1
            iconst_1
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.createPartition:(Ljava/lang/String;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            aastore
         8: .line 88
            aload 0 /* this */
            getfield com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.partitions:[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            bipush 6
            aload 0 /* this */
            ldc "readOnlyHuge"
            iconst_1
            iconst_0
            iconst_1
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.createPartition:(Ljava/lang/String;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            aastore
         9: .line 89
            return
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;

  public void assignObjectToPartition(com.oracle.svm.core.image.ImageHeapObject, boolean, boolean, boolean);
    descriptor: (Lcom/oracle/svm/core/image/ImageHeapObject;ZZZ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=5
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
        start local 1 // com.oracle.svm.core.image.ImageHeapObject info
        start local 2 // boolean immutable
        start local 3 // boolean references
        start local 4 // boolean relocatable
         0: .line 93
            aload 0 /* this */
            aload 1 /* info */
            iload 2 /* immutable */
            iload 3 /* references */
            iload 4 /* relocatable */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.choosePartition:(Lcom/oracle/svm/core/image/ImageHeapObject;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            astore 5 /* partition */
        start local 5 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition partition
         1: .line 94
            aload 1 /* info */
            aload 5 /* partition */
            invokeinterface com.oracle.svm.core.image.ImageHeapObject.setHeapPartition:(Lcom/oracle/svm/core/image/ImageHeapPartition;)V
         2: .line 95
            aload 5 /* partition */
            aload 1 /* info */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.assign:(Lcom/oracle/svm/core/image/ImageHeapObject;)V
         3: .line 96
            return
        end local 5 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition partition
        end local 4 // boolean relocatable
        end local 3 // boolean references
        end local 2 // boolean immutable
        end local 1 // com.oracle.svm.core.image.ImageHeapObject info
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    4     0         this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
            0    4     1         info  Lcom/oracle/svm/core/image/ImageHeapObject;
            0    4     2    immutable  Z
            0    4     3   references  Z
            0    4     4  relocatable  Z
            1    4     5    partition  TT;
    MethodParameters:
             Name  Flags
      info         
      immutable    
      references   
      relocatable  

  public com.oracle.svm.core.image.ImageHeapLayoutInfo layout(com.oracle.svm.core.image.ImageHeap, int);
    descriptor: (Lcom/oracle/svm/core/image/ImageHeap;I)Lcom/oracle/svm/core/image/ImageHeapLayoutInfo;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=10, args_size=3
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
        start local 1 // com.oracle.svm.core.image.ImageHeap imageHeap
        start local 2 // int pageSize
         0: .line 100
            invokestatic com.oracle.svm.core.config.ConfigurationValues.getObjectLayout:()Lcom/oracle/svm/core/config/ObjectLayout;
            invokevirtual com.oracle.svm.core.config.ObjectLayout.getAlignment:()I
            istore 3 /* objectAlignment */
        start local 3 // int objectAlignment
         1: .line 101
            getstatic com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.$assertionsDisabled:Z
            ifne 2
            iload 2 /* pageSize */
            iload 3 /* objectAlignment */
            irem
            ifeq 2
            new java.lang.AssertionError
            dup
            ldc "Page size does not match object alignment"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
         2: .line 103
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            dup
            astore 7
            arraylength
            istore 6
            iconst_0
            istore 5
            goto 18
      StackMap locals: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter com.oracle.svm.core.image.ImageHeap int int top int int com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition[]
      StackMap stack:
         3: aload 7
            iload 5
            aaload
            astore 4 /* partition */
        start local 4 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition partition
         4: .line 104
            iload 3 /* objectAlignment */
            istore 8 /* startAlignment */
        start local 8 // int startAlignment
         5: .line 105
            iload 3 /* objectAlignment */
            istore 9 /* endAlignment */
        start local 9 // int endAlignment
         6: .line 106
            aload 4 /* partition */
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyRelocatable:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            if_acmpne 10
         7: .line 107
            iload 2 /* pageSize */
            istore 8 /* startAlignment */
         8: .line 108
            iload 2 /* pageSize */
            istore 9 /* endAlignment */
         9: .line 109
            goto 15
      StackMap locals: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter com.oracle.svm.core.image.ImageHeap int int com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition int int com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition[] int int
      StackMap stack:
        10: aload 4 /* partition */
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getWritablePrimitive:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            if_acmpne 13
        11: .line 110
            iload 2 /* pageSize */
            istore 8 /* startAlignment */
        12: .line 111
            goto 15
      StackMap locals:
      StackMap stack:
        13: aload 4 /* partition */
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getWritableHuge:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            if_acmpne 15
        14: .line 112
            iload 2 /* pageSize */
            istore 9 /* endAlignment */
        15: .line 114
      StackMap locals:
      StackMap stack:
            aload 4 /* partition */
            iload 8 /* startAlignment */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.setStartAlignment:(I)V
        16: .line 115
            aload 4 /* partition */
            iload 9 /* endAlignment */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.setEndAlignment:(I)V
        end local 9 // int endAlignment
        end local 8 // int startAlignment
        end local 4 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition partition
        17: .line 103
            iinc 5 1
      StackMap locals: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter com.oracle.svm.core.image.ImageHeap int int top int int com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition[]
      StackMap stack:
        18: iload 5
            iload 6
            if_icmplt 3
        19: .line 118
            aload 0 /* this */
            aload 1 /* imageHeap */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.doLayout:(Lcom/oracle/svm/core/image/ImageHeap;)Lcom/oracle/svm/core/image/ImageHeapLayoutInfo;
            astore 4 /* layoutInfo */
        start local 4 // com.oracle.svm.core.image.ImageHeapLayoutInfo layoutInfo
        20: .line 120
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            dup
            astore 8
            arraylength
            istore 7
            iconst_0
            istore 6
            goto 25
      StackMap locals: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter com.oracle.svm.core.image.ImageHeap int int com.oracle.svm.core.image.ImageHeapLayoutInfo top int int com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition[]
      StackMap stack:
        21: aload 8
            iload 6
            aaload
            astore 5 /* partition */
        start local 5 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition partition
        22: .line 121
            getstatic com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.$assertionsDisabled:Z
            ifne 23
            aload 5 /* partition */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getStartOffset:()J
            aload 5 /* partition */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getStartAlignment:()I
            i2l
            lrem
            lconst_0
            lcmp
            ifeq 23
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        23: .line 122
      StackMap locals: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter com.oracle.svm.core.image.ImageHeap int int com.oracle.svm.core.image.ImageHeapLayoutInfo com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition int int com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition[]
      StackMap stack:
            getstatic com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.$assertionsDisabled:Z
            ifne 24
            aload 5 /* partition */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getStartOffset:()J
            aload 5 /* partition */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getSize:()J
            ladd
            aload 5 /* partition */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getEndAlignment:()I
            i2l
            lrem
            lconst_0
            lcmp
            ifeq 24
            new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        end local 5 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition partition
        24: .line 120
      StackMap locals: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter com.oracle.svm.core.image.ImageHeap int int com.oracle.svm.core.image.ImageHeapLayoutInfo top int int com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition[]
      StackMap stack:
            iinc 6 1
      StackMap locals:
      StackMap stack:
        25: iload 6
            iload 7
            if_icmplt 21
        26: .line 125
            getstatic com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.$assertionsDisabled:Z
            ifne 28
            aload 4 /* layoutInfo */
            invokevirtual com.oracle.svm.core.image.ImageHeapLayoutInfo.getReadOnlyRelocatableOffset:()J
            iload 2 /* pageSize */
            i2l
            lrem
            lconst_0
            lcmp
            ifne 27
            aload 4 /* layoutInfo */
            invokevirtual com.oracle.svm.core.image.ImageHeapLayoutInfo.getReadOnlyRelocatableSize:()J
            iload 2 /* pageSize */
            i2l
            lrem
            lconst_0
            lcmp
            ifeq 28
      StackMap locals: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter com.oracle.svm.core.image.ImageHeap int int com.oracle.svm.core.image.ImageHeapLayoutInfo
      StackMap stack:
        27: new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        28: .line 126
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.$assertionsDisabled:Z
            ifne 30
            aload 4 /* layoutInfo */
            invokevirtual com.oracle.svm.core.image.ImageHeapLayoutInfo.getWritableOffset:()J
            iload 2 /* pageSize */
            i2l
            lrem
            lconst_0
            lcmp
            ifne 29
            aload 4 /* layoutInfo */
            invokevirtual com.oracle.svm.core.image.ImageHeapLayoutInfo.getWritableSize:()J
            iload 2 /* pageSize */
            i2l
            lrem
            lconst_0
            lcmp
            ifeq 30
      StackMap locals:
      StackMap stack:
        29: new java.lang.AssertionError
            dup
            invokespecial java.lang.AssertionError.<init>:()V
            athrow
        30: .line 128
      StackMap locals:
      StackMap stack:
            aload 4 /* layoutInfo */
            areturn
        end local 4 // com.oracle.svm.core.image.ImageHeapLayoutInfo layoutInfo
        end local 3 // int objectAlignment
        end local 2 // int pageSize
        end local 1 // com.oracle.svm.core.image.ImageHeap imageHeap
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   31     0             this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
            0   31     1        imageHeap  Lcom/oracle/svm/core/image/ImageHeap;
            0   31     2         pageSize  I
            1   31     3  objectAlignment  I
            4   17     4        partition  TT;
            5   17     8   startAlignment  I
            6   17     9     endAlignment  I
           20   31     4       layoutInfo  Lcom/oracle/svm/core/image/ImageHeapLayoutInfo;
           22   24     5        partition  TT;
    MethodParameters:
           Name  Flags
      imageHeap  
      pageSize   

  public void writeMetadata(java.nio.ByteBuffer, long);
    descriptor: (Ljava/nio/ByteBuffer;J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=4, args_size=3
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
        start local 1 // java.nio.ByteBuffer imageHeapBytes
        start local 2 // long imageHeapOffsetInBuffer
         0: .line 134
            return
        end local 2 // long imageHeapOffsetInBuffer
        end local 1 // java.nio.ByteBuffer imageHeapBytes
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot                     Name  Signature
            0    1     0                     this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
            0    1     1           imageHeapBytes  Ljava/nio/ByteBuffer;
            0    1     2  imageHeapOffsetInBuffer  J
    MethodParameters:
                         Name  Flags
      imageHeapBytes           
      imageHeapOffsetInBuffer  

  protected abstract com.oracle.svm.core.image.ImageHeapLayoutInfo doLayout(com.oracle.svm.core.image.ImageHeap);
    descriptor: (Lcom/oracle/svm/core/image/ImageHeap;)Lcom/oracle/svm/core/image/ImageHeapLayoutInfo;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    MethodParameters:
           Name  Flags
      imageHeap  

  protected T getReadOnlyPrimitive();
    descriptor: ()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 139
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_0
            aaload
            areturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
    Signature: ()TT;

  protected T getReadOnlyReference();
    descriptor: ()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 143
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_1
            aaload
            areturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
    Signature: ()TT;

  protected T getReadOnlyRelocatable();
    descriptor: ()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 147
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_2
            aaload
            areturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
    Signature: ()TT;

  protected T getWritablePrimitive();
    descriptor: ()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 151
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_3
            aaload
            areturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
    Signature: ()TT;

  protected T getWritableReference();
    descriptor: ()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 155
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_4
            aaload
            areturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
    Signature: ()TT;

  protected T getWritableHuge();
    descriptor: ()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 159
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            iconst_5
            aaload
            areturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
    Signature: ()TT;

  protected T getReadOnlyHuge();
    descriptor: ()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 163
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            bipush 6
            aaload
            areturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
    Signature: ()TT;

  protected long getHugeObjectThreshold();
    descriptor: ()J
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
         0: .line 169
            ldc 9223372036854775807
            lreturn
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;

  private T choosePartition(com.oracle.svm.core.image.ImageHeapObject, boolean, boolean, );
    descriptor: (Lcom/oracle/svm/core/image/ImageHeapObject;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=5
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
        start local 1 // com.oracle.svm.core.image.ImageHeapObject info
        start local 2 // boolean immutable
        start local 3 // boolean hasReferences
        start local 4 // boolean hasRelocatables
         0: .line 173
            iload 2 /* immutable */
            ifeq 14
         1: .line 174
            iload 4 /* hasRelocatables */
            ifeq 6
         2: .line 175
            aload 1 /* info */
            invokeinterface com.oracle.svm.core.image.ImageHeapObject.getSize:()J
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getHugeObjectThreshold:()J
            lcmp
            ifge 3
            iconst_1
            goto 4
      StackMap locals:
      StackMap stack:
         3: iconst_0
      StackMap locals:
      StackMap stack: int
         4: ldc "Objects with relocatable pointers cannot be huge objects"
            invokestatic com.oracle.svm.core.util.VMError.guarantee:(ZLjava/lang/String;)V
         5: .line 176
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyRelocatable:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            areturn
         6: .line 178
      StackMap locals:
      StackMap stack:
            aload 1 /* info */
            invokeinterface com.oracle.svm.core.image.ImageHeapObject.getSize:()J
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getHugeObjectThreshold:()J
            lcmp
            iflt 11
         7: .line 179
            aload 1 /* info */
            invokeinterface com.oracle.svm.core.image.ImageHeapObject.getObject:()Ljava/lang/Object;
            instanceof com.oracle.svm.core.hub.DynamicHub
            ifeq 8
            iconst_0
            goto 9
      StackMap locals:
      StackMap stack:
         8: iconst_1
      StackMap locals:
      StackMap stack: int
         9: ldc "Class metadata (dynamic hubs) cannot be huge objects"
            invokestatic com.oracle.svm.core.util.VMError.guarantee:(ZLjava/lang/String;)V
        10: .line 180
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyHuge:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            areturn
        11: .line 182
      StackMap locals:
      StackMap stack:
            iload 3 /* hasReferences */
            ifeq 12
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyReference:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            goto 13
      StackMap locals:
      StackMap stack:
        12: aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyPrimitive:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
      StackMap locals:
      StackMap stack: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition
        13: areturn
        14: .line 184
      StackMap locals:
      StackMap stack:
            getstatic com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.$assertionsDisabled:Z
            ifne 15
            aload 1 /* info */
            invokeinterface com.oracle.svm.core.image.ImageHeapObject.getObject:()Ljava/lang/Object;
            instanceof com.oracle.svm.core.hub.DynamicHub
            ifeq 15
            new java.lang.AssertionError
            dup
            ldc "Class metadata (dynamic hubs) cannot be writable"
            invokespecial java.lang.AssertionError.<init>:(Ljava/lang/Object;)V
            athrow
        15: .line 185
      StackMap locals:
      StackMap stack:
            aload 1 /* info */
            invokeinterface com.oracle.svm.core.image.ImageHeapObject.getSize:()J
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getHugeObjectThreshold:()J
            lcmp
            iflt 17
        16: .line 186
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getWritableHuge:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            areturn
        17: .line 188
      StackMap locals:
      StackMap stack:
            iload 3 /* hasReferences */
            ifeq 18
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getWritableReference:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            goto 19
      StackMap locals:
      StackMap stack:
        18: aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getWritablePrimitive:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
      StackMap locals:
      StackMap stack: com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition
        19: areturn
        end local 4 // boolean hasRelocatables
        end local 3 // boolean hasReferences
        end local 2 // boolean immutable
        end local 1 // com.oracle.svm.core.image.ImageHeapObject info
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   20     0             this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
            0   20     1             info  Lcom/oracle/svm/core/image/ImageHeapObject;
            0   20     2        immutable  Z
            0   20     3    hasReferences  Z
            0   20     4  hasRelocatables  Z
    Signature: (Lcom/oracle/svm/core/image/ImageHeapObject;ZZZ)TT;
    MethodParameters:
                 Name  Flags
      info             
      immutable        
      hasReferences    
      hasRelocatables  

  protected com.oracle.svm.core.image.ImageHeapLayoutInfo createLayoutInfo(long, long);
    descriptor: (JJ)Lcom/oracle/svm/core/image/ImageHeapLayoutInfo;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=12, locals=11, args_size=3
        start local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
        start local 1 // long heapStartOffset
        start local 3 // long writableBeginOffset
         0: .line 193
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getWritableHuge:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getStartOffset:()J
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getWritableHuge:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getSize:()J
            ladd
            lstore 5 /* writableEnd */
        start local 5 // long writableEnd
         1: .line 194
            lload 5 /* writableEnd */
            lload 3 /* writableBeginOffset */
            lsub
            lstore 7 /* writableSize */
        start local 7 // long writableSize
         2: .line 195
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyHuge:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getStartOffset:()J
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyHuge:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getSize:()J
            ladd
            lload 1 /* heapStartOffset */
            lsub
            lstore 9 /* imageHeapSize */
        start local 9 // long imageHeapSize
         3: .line 196
            new com.oracle.svm.core.image.ImageHeapLayoutInfo
            dup
            lload 3 /* writableBeginOffset */
            lload 7 /* writableSize */
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyRelocatable:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getStartOffset:()J
            aload 0 /* this */
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getReadOnlyRelocatable:()Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition.getSize:()J
            lload 9 /* imageHeapSize */
            invokespecial com.oracle.svm.core.image.ImageHeapLayoutInfo.<init>:(JJJJJ)V
            areturn
        end local 9 // long imageHeapSize
        end local 7 // long writableSize
        end local 5 // long writableEnd
        end local 3 // long writableBeginOffset
        end local 1 // long heapStartOffset
        end local 0 // com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0    4     0                 this  Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter<TT;>;
            0    4     1      heapStartOffset  J
            0    4     3  writableBeginOffset  J
            1    4     5          writableEnd  J
            2    4     7         writableSize  J
            3    4     9        imageHeapSize  J
    MethodParameters:
                     Name  Flags
      heapStartOffset      
      writableBeginOffset  

  protected abstract T[] createPartitionsArray();
    descriptor: (I)[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: (I)[TT;
    MethodParameters:
       Name  Flags
      count  

  protected abstract T createPartition(java.lang.String, boolean, boolean, );
    descriptor: (Ljava/lang/String;ZZZ)Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Signature: (Ljava/lang/String;ZZZ)TT;
    MethodParameters:
                    Name  Flags
      name                
      containsReferences  
      writable            
      hugeObjects         

  public com.oracle.svm.core.image.ImageHeapPartition[] getPartitions();
    descriptor: ()[Lcom/oracle/svm/core/image/ImageHeapPartition;
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=1, locals=1, args_size=1
         0: .line 1
            aload 0
            invokevirtual com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter.getPartitions:()[Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;
            areturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
Signature: <T:Lcom/oracle/svm/core/genscavenge/AbstractImageHeapLayouter$AbstractImageHeapPartition;>Ljava/lang/Object;Lcom/oracle/svm/core/image/ImageHeapLayouter;
SourceFile: "AbstractImageHeapLayouter.java"
NestMembers:
  com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition
InnerClasses:
  public abstract AbstractImageHeapPartition = com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter$AbstractImageHeapPartition of com.oracle.svm.core.genscavenge.AbstractImageHeapLayouter