public final class com.oracle.truffle.api.test.GCUtils
  minor version: 0
  major version: 59
  flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
  this_class: com.oracle.truffle.api.test.GCUtils
  super_class: java.lang.Object
{
  public static final int GC_TEST_ITERATIONS;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 15

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // com.oracle.truffle.api.test.GCUtils this
         0: .line 60
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 61
            new java.lang.IllegalStateException
            dup
            ldc "No instance allowed."
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // com.oracle.truffle.api.test.GCUtils this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lcom/oracle/truffle/api/test/GCUtils;

  public static void assertObjectsCollectible(java.util.function.Function<java.lang.Integer, java.lang.Object>);
    descriptor: (Ljava/util/function/Function;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=4, args_size=1
        start local 0 // java.util.function.Function objectFactory
         0: .line 76
            new java.lang.ref.ReferenceQueue
            dup
            invokespecial java.lang.ref.ReferenceQueue.<init>:()V
            astore 1 /* queue */
        start local 1 // java.lang.ref.ReferenceQueue queue
         1: .line 77
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* collectibleObjects */
        start local 2 // java.util.List collectibleObjects
         2: .line 78
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         3: goto 7
         4: .line 79
      StackMap locals: java.lang.ref.ReferenceQueue java.util.List int
      StackMap stack:
            aload 2 /* collectibleObjects */
            new java.lang.ref.WeakReference
            dup
            aload 0 /* objectFactory */
            iload 3 /* i */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.function.Function.apply:(Ljava/lang/Object;)Ljava/lang/Object;
            aload 1 /* queue */
            invokespecial java.lang.ref.WeakReference.<init>:(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         5: .line 80
            invokestatic java.lang.System.gc:()V
         6: .line 78
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
         7: iload 3 /* i */
            bipush 15
            if_icmplt 4
        end local 3 // int i
         8: .line 82
            aload 2 /* collectibleObjects */
            invokestatic com.oracle.truffle.api.test.GCUtils$IsFreed.anyOf:(Ljava/util/Collection;)Lcom/oracle/truffle/api/test/GCUtils$IsFreed;
            iconst_1
            invokestatic com.oracle.truffle.api.test.GCUtils.gc:(Ljava/util/function/BooleanSupplier;Z)Z
            pop
         9: .line 83
            iconst_0
            istore 3 /* refsCleared */
        start local 3 // int refsCleared
        10: .line 84
            goto 12
        11: .line 85
      StackMap locals:
      StackMap stack:
            iinc 3 /* refsCleared */ 1
        12: .line 84
      StackMap locals:
      StackMap stack:
            aload 1 /* queue */
            invokevirtual java.lang.ref.ReferenceQueue.poll:()Ljava/lang/ref/Reference;
            ifnonnull 11
        13: .line 88
            iload 3 /* refsCleared */
            ifle 14
            iconst_1
            goto 15
      StackMap locals:
      StackMap stack:
        14: iconst_0
      StackMap locals:
      StackMap stack: int
        15: invokestatic org.junit.Assert.assertTrue:(Z)V
        16: .line 89
            return
        end local 3 // int refsCleared
        end local 2 // java.util.List collectibleObjects
        end local 1 // java.lang.ref.ReferenceQueue queue
        end local 0 // java.util.function.Function objectFactory
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   17     0       objectFactory  Ljava/util/function/Function<Ljava/lang/Integer;Ljava/lang/Object;>;
            1   17     1               queue  Ljava/lang/ref/ReferenceQueue<Ljava/lang/Object;>;
            2   17     2  collectibleObjects  Ljava/util/List<Ljava/lang/ref/WeakReference<Ljava/lang/Object;>;>;
            3    8     3                   i  I
           10   17     3         refsCleared  I
    Signature: (Ljava/util/function/Function<Ljava/lang/Integer;Ljava/lang/Object;>;)V
    MethodParameters:
               Name  Flags
      objectFactory  

  public static void assertGc(java.lang.String, java.lang.ref.Reference<?>);
    descriptor: (Ljava/lang/String;Ljava/lang/ref/Reference;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.String message
        start local 1 // java.lang.ref.Reference ref
         0: .line 98
            aload 1 /* ref */
            invokestatic java.util.Collections.singleton:(Ljava/lang/Object;)Ljava/util/Set;
            invokestatic com.oracle.truffle.api.test.GCUtils$IsFreed.allOf:(Ljava/util/Collection;)Lcom/oracle/truffle/api/test/GCUtils$IsFreed;
            iconst_1
            invokestatic com.oracle.truffle.api.test.GCUtils.gc:(Ljava/util/function/BooleanSupplier;Z)Z
            ifne 2
         1: .line 99
            aload 0 /* message */
            invokestatic org.junit.Assert.fail:(Ljava/lang/String;)V
         2: .line 101
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.ref.Reference ref
        end local 0 // java.lang.String message
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0  message  Ljava/lang/String;
            0    3     1      ref  Ljava/lang/ref/Reference<*>;
    Signature: (Ljava/lang/String;Ljava/lang/ref/Reference<*>;)V
    MethodParameters:
         Name  Flags
      message  final
      ref      final

  public static void assertNotGc(java.lang.String, java.lang.ref.Reference<?>);
    descriptor: (Ljava/lang/String;Ljava/lang/ref/Reference;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.String message
        start local 1 // java.lang.ref.Reference ref
         0: .line 110
            aload 1 /* ref */
            invokestatic java.util.Collections.singleton:(Ljava/lang/Object;)Ljava/util/Set;
            invokestatic com.oracle.truffle.api.test.GCUtils$IsFreed.allOf:(Ljava/util/Collection;)Lcom/oracle/truffle/api/test/GCUtils$IsFreed;
            iconst_0
            invokestatic com.oracle.truffle.api.test.GCUtils.gc:(Ljava/util/function/BooleanSupplier;Z)Z
            ifeq 2
         1: .line 111
            aload 0 /* message */
            invokestatic org.junit.Assert.fail:(Ljava/lang/String;)V
         2: .line 113
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.ref.Reference ref
        end local 0 // java.lang.String message
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0  message  Ljava/lang/String;
            0    3     1      ref  Ljava/lang/ref/Reference<*>;
    Signature: (Ljava/lang/String;Ljava/lang/ref/Reference<*>;)V
    MethodParameters:
         Name  Flags
      message  final
      ref      final

  private static boolean gc(java.util.function.BooleanSupplier, boolean);
    descriptor: (Ljava/util/function/BooleanSupplier;Z)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // java.util.function.BooleanSupplier isFreed
        start local 1 // boolean performAllocations
         0: .line 116
            ldc 100000
            istore 2 /* blockSize */
        start local 2 // int blockSize
         1: .line 117
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 3 /* blocks */
        start local 3 // java.util.List blocks
         2: .line 118
            iconst_0
            istore 4 /* i */
        start local 4 // int i
         3: goto 24
         4: .line 119
      StackMap locals: int java.util.List int
      StackMap stack:
            aload 0 /* isFreed */
            invokeinterface java.util.function.BooleanSupplier.getAsBoolean:()Z
            ifeq 6
         5: .line 120
            iconst_1
            ireturn
         6: .line 123
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.System.gc:()V
         7: .line 124
            goto 9
      StackMap locals:
      StackMap stack: java.lang.OutOfMemoryError
         8: pop
         9: .line 127
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.System.runFinalization:()V
        10: .line 128
            goto 12
      StackMap locals:
      StackMap stack: java.lang.OutOfMemoryError
        11: pop
        12: .line 130
      StackMap locals:
      StackMap stack:
            iload 1 /* performAllocations */
            ifeq 18
        13: .line 132
            aload 3 /* blocks */
            iload 2 /* blockSize */
            newarray 8
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        14: .line 133
            iload 2 /* blockSize */
            i2d
            ldc 1.3
            dmul
            d2i
            istore 2 /* blockSize */
        15: .line 134
            goto 18
      StackMap locals:
      StackMap stack: java.lang.OutOfMemoryError
        16: pop
        17: .line 135
            iload 2 /* blockSize */
            iconst_1
            iushr
            istore 2 /* blockSize */
        18: .line 138
      StackMap locals:
      StackMap stack:
            iload 4 /* i */
            bipush 10
            irem
            ifne 23
        19: .line 140
            ldc 500
            invokestatic java.lang.Thread.sleep:(J)V
        20: .line 141
            goto 23
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        21: pop
        22: .line 142
            goto 25
        23: .line 118
      StackMap locals:
      StackMap stack:
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
        24: iload 4 /* i */
            bipush 50
            if_icmplt 4
        end local 4 // int i
        25: .line 146
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        end local 3 // java.util.List blocks
        end local 2 // int blockSize
        end local 1 // boolean performAllocations
        end local 0 // java.util.function.BooleanSupplier isFreed
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   26     0             isFreed  Ljava/util/function/BooleanSupplier;
            0   26     1  performAllocations  Z
            1   26     2           blockSize  I
            2   26     3              blocks  Ljava/util/List<[B>;
            3   25     4                   i  I
      Exception table:
        from    to  target  type
           6     7       8  Class java.lang.OutOfMemoryError
           9    10      11  Class java.lang.OutOfMemoryError
          13    15      16  Class java.lang.OutOfMemoryError
          19    20      21  Class java.lang.InterruptedException
    MethodParameters:
                    Name  Flags
      isFreed             
      performAllocations  
}
SourceFile: "GCUtils.java"
NestMembers:
  com.oracle.truffle.api.test.GCUtils$IsFreed  com.oracle.truffle.api.test.GCUtils$IsFreed$Operator
InnerClasses:
  private final IsFreed = com.oracle.truffle.api.test.GCUtils$IsFreed of com.oracle.truffle.api.test.GCUtils