public class org.h2.util.CacheLRU implements org.h2.util.Cache
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.h2.util.CacheLRU
  super_class: java.lang.Object
{
  static final java.lang.String TYPE_NAME;
    descriptor: Ljava/lang/String;
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: "LRU"

  private final org.h2.util.CacheWriter writer;
    descriptor: Lorg/h2/util/CacheWriter;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final boolean fifo;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.h2.util.CacheObject head;
    descriptor: Lorg/h2/util/CacheObject;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

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

  private org.h2.util.CacheObject[] values;
    descriptor: [Lorg/h2/util/CacheObject;
    flags: (0x0002) ACC_PRIVATE

  private int recordCount;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

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

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

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

  void <init>(org.h2.util.CacheWriter, int, boolean);
    descriptor: (Lorg/h2/util/CacheWriter;IZ)V
    flags: (0x0000) 
    Code:
      stack=5, locals=6, args_size=4
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // org.h2.util.CacheWriter writer
        start local 2 // int maxMemoryKb
        start local 3 // boolean fifo
         0: .line 50
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 30
            aload 0 /* this */
            new org.h2.util.CacheHead
            dup
            invokespecial org.h2.util.CacheHead.<init>:()V
            putfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
         2: .line 51
            aload 0 /* this */
            aload 1 /* writer */
            putfield org.h2.util.CacheLRU.writer:Lorg/h2/util/CacheWriter;
         3: .line 52
            aload 0 /* this */
            iload 3 /* fifo */
            putfield org.h2.util.CacheLRU.fifo:Z
         4: .line 53
            aload 0 /* this */
            iload 2 /* maxMemoryKb */
            invokevirtual org.h2.util.CacheLRU.setMaxMemory:(I)V
         5: .line 57
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.maxMemory:J
            ldc 64
            ldiv
            lstore 4 /* tmpLen */
        start local 4 // long tmpLen
         6: .line 58
            lload 4 /* tmpLen */
            ldc 2147483647
            lcmp
            ifle 8
         7: .line 59
            new java.lang.IllegalArgumentException
            dup
            invokespecial java.lang.IllegalArgumentException.<init>:()V
            athrow
         8: .line 61
      StackMap locals: org.h2.util.CacheLRU org.h2.util.CacheWriter int int long
      StackMap stack:
            aload 0 /* this */
            lload 4 /* tmpLen */
            l2i
            invokestatic org.h2.util.MathUtils.nextPowerOf2:(I)I
            putfield org.h2.util.CacheLRU.len:I
        end local 4 // long tmpLen
         9: .line 62
            goto 12
      StackMap locals: org.h2.util.CacheLRU org.h2.util.CacheWriter int int
      StackMap stack: java.lang.IllegalArgumentException
        10: astore 4 /* e */
        start local 4 // java.lang.IllegalArgumentException e
        11: .line 63
            new java.lang.IllegalStateException
            dup
            new java.lang.StringBuilder
            dup
            ldc "This much cache memory is not supported: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 2 /* maxMemoryKb */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc "kb"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 4 /* e */
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.lang.IllegalArgumentException e
        12: .line 65
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.len:I
            iconst_1
            isub
            putfield org.h2.util.CacheLRU.mask:I
        13: .line 66
            aload 0 /* this */
            invokevirtual org.h2.util.CacheLRU.clear:()V
        14: .line 67
            return
        end local 3 // boolean fifo
        end local 2 // int maxMemoryKb
        end local 1 // org.h2.util.CacheWriter writer
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   15     0         this  Lorg/h2/util/CacheLRU;
            0   15     1       writer  Lorg/h2/util/CacheWriter;
            0   15     2  maxMemoryKb  I
            0   15     3         fifo  Z
            6    9     4       tmpLen  J
           11   12     4            e  Ljava/lang/IllegalArgumentException;
      Exception table:
        from    to  target  type
           5     9      10  Class java.lang.IllegalArgumentException
    MethodParameters:
             Name  Flags
      writer       
      maxMemoryKb  
      fifo         

  public static org.h2.util.Cache getCache(org.h2.util.CacheWriter, java.lang.String, int);
    descriptor: (Lorg/h2/util/CacheWriter;Ljava/lang/String;I)Lorg/h2/util/Cache;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // org.h2.util.CacheWriter writer
        start local 1 // java.lang.String cacheType
        start local 2 // int cacheSize
         0: .line 79
            aconst_null
            astore 3 /* secondLevel */
        start local 3 // java.util.Map secondLevel
         1: .line 80
            aload 1 /* cacheType */
            ldc "SOFT_"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 4
         2: .line 81
            new org.h2.util.SoftHashMap
            dup
            invokespecial org.h2.util.SoftHashMap.<init>:()V
            astore 3 /* secondLevel */
         3: .line 82
            aload 1 /* cacheType */
            ldc "SOFT_"
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            astore 1 /* cacheType */
         4: .line 85
      StackMap locals: java.util.Map
      StackMap stack:
            ldc "LRU"
            aload 1 /* cacheType */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 7
         5: .line 86
            new org.h2.util.CacheLRU
            dup
            aload 0 /* writer */
            iload 2 /* cacheSize */
            iconst_0
            invokespecial org.h2.util.CacheLRU.<init>:(Lorg/h2/util/CacheWriter;IZ)V
            astore 4 /* cache */
        start local 4 // org.h2.util.Cache cache
         6: .line 87
            goto 11
        end local 4 // org.h2.util.Cache cache
      StackMap locals:
      StackMap stack:
         7: ldc "TQ"
            aload 1 /* cacheType */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 10
         8: .line 88
            new org.h2.util.CacheTQ
            dup
            aload 0 /* writer */
            iload 2 /* cacheSize */
            invokespecial org.h2.util.CacheTQ.<init>:(Lorg/h2/util/CacheWriter;I)V
            astore 4 /* cache */
        start local 4 // org.h2.util.Cache cache
         9: .line 89
            goto 11
        end local 4 // org.h2.util.Cache cache
        10: .line 90
      StackMap locals:
      StackMap stack:
            ldc "CACHE_TYPE"
            aload 1 /* cacheType */
            invokestatic org.h2.message.DbException.getInvalidValueException:(Ljava/lang/String;Ljava/lang/Object;)Lorg/h2/message/DbException;
            athrow
        start local 4 // org.h2.util.Cache cache
        11: .line 92
      StackMap locals: org.h2.util.Cache
      StackMap stack:
            aload 3 /* secondLevel */
            ifnull 13
        12: .line 93
            new org.h2.util.CacheSecondLevel
            dup
            aload 4 /* cache */
            aload 3 /* secondLevel */
            invokespecial org.h2.util.CacheSecondLevel.<init>:(Lorg/h2/util/Cache;Ljava/util/Map;)V
            astore 4 /* cache */
        13: .line 95
      StackMap locals:
      StackMap stack:
            aload 4 /* cache */
            areturn
        end local 4 // org.h2.util.Cache cache
        end local 3 // java.util.Map secondLevel
        end local 2 // int cacheSize
        end local 1 // java.lang.String cacheType
        end local 0 // org.h2.util.CacheWriter writer
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   14     0       writer  Lorg/h2/util/CacheWriter;
            0   14     1    cacheType  Ljava/lang/String;
            0   14     2    cacheSize  I
            1   14     3  secondLevel  Ljava/util/Map<Ljava/lang/Integer;Lorg/h2/util/CacheObject;>;
            6    7     4        cache  Lorg/h2/util/Cache;
            9   10     4        cache  Lorg/h2/util/Cache;
           11   14     4        cache  Lorg/h2/util/Cache;
    MethodParameters:
           Name  Flags
      writer     
      cacheType  
      cacheSize  

  public void clear();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // org.h2.util.CacheLRU this
         0: .line 100
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            dup_x1
            putfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
            putfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
         1: .line 102
            aload 0 /* this */
            aconst_null
            putfield org.h2.util.CacheLRU.values:[Lorg/h2/util/CacheObject;
         2: .line 103
            aload 0 /* this */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.len:I
            anewarray org.h2.util.CacheObject
            putfield org.h2.util.CacheLRU.values:[Lorg/h2/util/CacheObject;
         3: .line 104
            aload 0 /* this */
            iconst_0
            putfield org.h2.util.CacheLRU.recordCount:I
         4: .line 105
            aload 0 /* this */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.len:I
            i2l
            ldc 8
            lmul
            putfield org.h2.util.CacheLRU.memory:J
         5: .line 106
            return
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lorg/h2/util/CacheLRU;

  public void put(org.h2.util.CacheObject);
    descriptor: (Lorg/h2/util/CacheObject;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // org.h2.util.CacheObject rec
         0: .line 110
            getstatic org.h2.engine.SysProperties.CHECK:Z
            ifeq 7
         1: .line 111
            aload 1 /* rec */
            invokevirtual org.h2.util.CacheObject.getPos:()I
            istore 2 /* pos */
        start local 2 // int pos
         2: .line 112
            aload 0 /* this */
            iload 2 /* pos */
            invokevirtual org.h2.util.CacheLRU.find:(I)Lorg/h2/util/CacheObject;
            astore 3 /* old */
        start local 3 // org.h2.util.CacheObject old
         3: .line 113
            aload 3 /* old */
            ifnull 7
         4: .line 115
            new java.lang.StringBuilder
            dup
            ldc "try to add a record twice at pos "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
         5: .line 116
            iload 2 /* pos */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
         6: .line 115
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
        end local 3 // org.h2.util.CacheObject old
        end local 2 // int pos
         7: .line 119
      StackMap locals:
      StackMap stack:
            aload 1 /* rec */
            invokevirtual org.h2.util.CacheObject.getPos:()I
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.mask:I
            iand
            istore 2 /* index */
        start local 2 // int index
         8: .line 120
            aload 1 /* rec */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.values:[Lorg/h2/util/CacheObject;
            iload 2 /* index */
            aaload
            putfield org.h2.util.CacheObject.cacheChained:Lorg/h2/util/CacheObject;
         9: .line 121
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.values:[Lorg/h2/util/CacheObject;
            iload 2 /* index */
            aload 1 /* rec */
            aastore
        10: .line 122
            aload 0 /* this */
            dup
            getfield org.h2.util.CacheLRU.recordCount:I
            iconst_1
            iadd
            putfield org.h2.util.CacheLRU.recordCount:I
        11: .line 123
            aload 0 /* this */
            dup
            getfield org.h2.util.CacheLRU.memory:J
            aload 1 /* rec */
            invokevirtual org.h2.util.CacheObject.getMemory:()I
            i2l
            ladd
            putfield org.h2.util.CacheLRU.memory:J
        12: .line 124
            aload 0 /* this */
            aload 1 /* rec */
            invokevirtual org.h2.util.CacheLRU.addToFront:(Lorg/h2/util/CacheObject;)V
        13: .line 125
            aload 0 /* this */
            invokevirtual org.h2.util.CacheLRU.removeOldIfRequired:()V
        14: .line 126
            return
        end local 2 // int index
        end local 1 // org.h2.util.CacheObject rec
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   15     0   this  Lorg/h2/util/CacheLRU;
            0   15     1    rec  Lorg/h2/util/CacheObject;
            2    7     2    pos  I
            3    7     3    old  Lorg/h2/util/CacheObject;
            8   15     2  index  I
    MethodParameters:
      Name  Flags
      rec   

  public org.h2.util.CacheObject update(int, org.h2.util.CacheObject);
    descriptor: (ILorg/h2/util/CacheObject;)Lorg/h2/util/CacheObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // int pos
        start local 2 // org.h2.util.CacheObject rec
         0: .line 130
            aload 0 /* this */
            iload 1 /* pos */
            invokevirtual org.h2.util.CacheLRU.find:(I)Lorg/h2/util/CacheObject;
            astore 3 /* old */
        start local 3 // org.h2.util.CacheObject old
         1: .line 131
            aload 3 /* old */
            ifnonnull 4
         2: .line 132
            aload 0 /* this */
            aload 2 /* rec */
            invokevirtual org.h2.util.CacheLRU.put:(Lorg/h2/util/CacheObject;)V
         3: .line 133
            goto 9
         4: .line 134
      StackMap locals: org.h2.util.CacheObject
      StackMap stack:
            aload 3 /* old */
            aload 2 /* rec */
            if_acmpeq 6
         5: .line 135
            new java.lang.StringBuilder
            dup
            ldc "old!=record pos:"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            iload 1 /* pos */
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " old:"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 3 /* old */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " new:"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* rec */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
         6: .line 137
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.fifo:Z
            ifne 9
         7: .line 138
            aload 0 /* this */
            aload 2 /* rec */
            invokevirtual org.h2.util.CacheLRU.removeFromLinkedList:(Lorg/h2/util/CacheObject;)V
         8: .line 139
            aload 0 /* this */
            aload 2 /* rec */
            invokevirtual org.h2.util.CacheLRU.addToFront:(Lorg/h2/util/CacheObject;)V
         9: .line 142
      StackMap locals:
      StackMap stack:
            aload 3 /* old */
            areturn
        end local 3 // org.h2.util.CacheObject old
        end local 2 // org.h2.util.CacheObject rec
        end local 1 // int pos
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0  this  Lorg/h2/util/CacheLRU;
            0   10     1   pos  I
            0   10     2   rec  Lorg/h2/util/CacheObject;
            1   10     3   old  Lorg/h2/util/CacheObject;
    MethodParameters:
      Name  Flags
      pos   
      rec   

  private void removeOldIfRequired();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.h2.util.CacheLRU this
         0: .line 147
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.memory:J
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.maxMemory:J
            lcmp
            iflt 2
         1: .line 148
            aload 0 /* this */
            invokevirtual org.h2.util.CacheLRU.removeOld:()V
         2: .line 150
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/h2/util/CacheLRU;

  private void removeOld();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=13, args_size=1
        start local 0 // org.h2.util.CacheLRU this
         0: .line 153
            iconst_0
            istore 1 /* i */
        start local 1 // int i
         1: .line 154
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* changed */
        start local 2 // java.util.ArrayList changed
         2: .line 155
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.memory:J
            lstore 3 /* mem */
        start local 3 // long mem
         3: .line 156
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.recordCount:I
            istore 5 /* rc */
        start local 5 // int rc
         4: .line 157
            iconst_0
            istore 6 /* flushed */
        start local 6 // boolean flushed
         5: .line 158
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            getfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
            astore 7 /* next */
        start local 7 // org.h2.util.CacheObject next
         6: .line 160
      StackMap locals: org.h2.util.CacheLRU int java.util.ArrayList long int int org.h2.util.CacheObject
      StackMap stack:
            iload 5 /* rc */
            bipush 16
            if_icmpgt 8
         7: .line 161
            goto 40
         8: .line 163
      StackMap locals:
      StackMap stack:
            aload 2 /* changed */
            invokevirtual java.util.ArrayList.isEmpty:()Z
            ifeq 11
         9: .line 164
            lload 3 /* mem */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.maxMemory:J
            lcmp
            ifgt 13
        10: .line 165
            goto 40
        11: .line 168
      StackMap locals:
      StackMap stack:
            lload 3 /* mem */
            ldc 4
            lmul
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.maxMemory:J
            ldc 3
            lmul
            lcmp
            ifgt 13
        12: .line 169
            goto 40
        13: .line 172
      StackMap locals:
      StackMap stack:
            aload 7 /* next */
            astore 8 /* check */
        start local 8 // org.h2.util.CacheObject check
        14: .line 173
            aload 8 /* check */
            getfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
            astore 7 /* next */
        15: .line 174
            iinc 1 /* i */ 1
        16: .line 175
            iload 1 /* i */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.recordCount:I
            if_icmplt 27
        17: .line 176
            iload 6 /* flushed */
            ifne 22
        18: .line 177
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.writer:Lorg/h2/util/CacheWriter;
            invokeinterface org.h2.util.CacheWriter.flushLog:()V
        19: .line 178
            iconst_1
            istore 6 /* flushed */
        20: .line 179
            iconst_0
            istore 1 /* i */
        21: .line 180
            goto 27
        22: .line 184
      StackMap locals: org.h2.util.CacheObject
      StackMap stack:
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.writer:Lorg/h2/util/CacheWriter;
            invokeinterface org.h2.util.CacheWriter.getTrace:()Lorg/h2/message/Trace;
        23: .line 185
            new java.lang.StringBuilder
            dup
            ldc "cannot remove records, cache size too small? records:"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
        24: .line 186
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.recordCount:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            ldc " memory:"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.memory:J
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
        25: .line 185
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual org.h2.message.Trace.info:(Ljava/lang/String;)V
        26: .line 187
            goto 40
        27: .line 190
      StackMap locals:
      StackMap stack:
            aload 8 /* check */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            if_acmpne 29
        28: .line 191
            ldc "try to remove head"
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
        29: .line 196
      StackMap locals:
      StackMap stack:
            aload 8 /* check */
            invokevirtual org.h2.util.CacheObject.canRemove:()Z
            ifne 33
        30: .line 197
            aload 0 /* this */
            aload 8 /* check */
            invokevirtual org.h2.util.CacheLRU.removeFromLinkedList:(Lorg/h2/util/CacheObject;)V
        31: .line 198
            aload 0 /* this */
            aload 8 /* check */
            invokevirtual org.h2.util.CacheLRU.addToFront:(Lorg/h2/util/CacheObject;)V
        32: .line 199
            goto 6
        33: .line 201
      StackMap locals:
      StackMap stack:
            iinc 5 /* rc */ -1
        34: .line 202
            lload 3 /* mem */
            aload 8 /* check */
            invokevirtual org.h2.util.CacheObject.getMemory:()I
            i2l
            lsub
            lstore 3 /* mem */
        35: .line 203
            aload 8 /* check */
            invokevirtual org.h2.util.CacheObject.isChanged:()Z
            ifeq 38
        36: .line 204
            aload 2 /* changed */
            aload 8 /* check */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
        37: .line 205
            goto 6
        38: .line 206
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 8 /* check */
            invokevirtual org.h2.util.CacheObject.getPos:()I
            invokevirtual org.h2.util.CacheLRU.remove:(I)Z
            pop
        end local 8 // org.h2.util.CacheObject check
        39: .line 159
            goto 6
        40: .line 209
      StackMap locals:
      StackMap stack:
            aload 2 /* changed */
            invokevirtual java.util.ArrayList.isEmpty:()Z
            ifne 64
        41: .line 210
            iload 6 /* flushed */
            ifne 43
        42: .line 211
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.writer:Lorg/h2/util/CacheWriter;
            invokeinterface org.h2.util.CacheWriter.flushLog:()V
        43: .line 213
      StackMap locals:
      StackMap stack:
            aload 2 /* changed */
            invokestatic java.util.Collections.sort:(Ljava/util/List;)V
        44: .line 214
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.maxMemory:J
            lstore 8 /* max */
        start local 8 // long max
        45: .line 215
            aload 2 /* changed */
            invokevirtual java.util.ArrayList.size:()I
            istore 10 /* size */
        start local 10 // int size
        46: .line 219
            aload 0 /* this */
            ldc 9223372036854775807
            putfield org.h2.util.CacheLRU.maxMemory:J
        47: .line 220
            iconst_0
            istore 1 /* i */
            goto 51
        48: .line 221
      StackMap locals: long int
      StackMap stack:
            aload 2 /* changed */
            iload 1 /* i */
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast org.h2.util.CacheObject
            astore 11 /* rec */
        start local 11 // org.h2.util.CacheObject rec
        49: .line 222
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.writer:Lorg/h2/util/CacheWriter;
            aload 11 /* rec */
            invokeinterface org.h2.util.CacheWriter.writeBack:(Lorg/h2/util/CacheObject;)V
        end local 11 // org.h2.util.CacheObject rec
        50: .line 220
            iinc 1 /* i */ 1
      StackMap locals:
      StackMap stack:
        51: iload 1 /* i */
            iload 10 /* size */
            if_icmplt 48
        52: .line 224
            goto 56
      StackMap locals:
      StackMap stack: java.lang.Throwable
        53: astore 12
        54: .line 225
            aload 0 /* this */
            lload 8 /* max */
            putfield org.h2.util.CacheLRU.maxMemory:J
        55: .line 226
            aload 12
            athrow
        56: .line 225
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            lload 8 /* max */
            putfield org.h2.util.CacheLRU.maxMemory:J
        57: .line 227
            iconst_0
            istore 1 /* i */
            goto 63
        58: .line 228
      StackMap locals:
      StackMap stack:
            aload 2 /* changed */
            iload 1 /* i */
            invokevirtual java.util.ArrayList.get:(I)Ljava/lang/Object;
            checkcast org.h2.util.CacheObject
            astore 11 /* rec */
        start local 11 // org.h2.util.CacheObject rec
        59: .line 229
            aload 0 /* this */
            aload 11 /* rec */
            invokevirtual org.h2.util.CacheObject.getPos:()I
            invokevirtual org.h2.util.CacheLRU.remove:(I)Z
            pop
        60: .line 230
            aload 11 /* rec */
            getfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
            ifnull 62
        61: .line 231
            invokestatic org.h2.message.DbException.throwInternalError:()Ljava/lang/RuntimeException;
            athrow
        end local 11 // org.h2.util.CacheObject rec
        62: .line 227
      StackMap locals:
      StackMap stack:
            iinc 1 /* i */ 1
      StackMap locals:
      StackMap stack:
        63: iload 1 /* i */
            iload 10 /* size */
            if_icmplt 58
        end local 10 // int size
        end local 8 // long max
        64: .line 235
      StackMap locals:
      StackMap stack:
            return
        end local 7 // org.h2.util.CacheObject next
        end local 6 // boolean flushed
        end local 5 // int rc
        end local 3 // long mem
        end local 2 // java.util.ArrayList changed
        end local 1 // int i
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   65     0     this  Lorg/h2/util/CacheLRU;
            1   65     1        i  I
            2   65     2  changed  Ljava/util/ArrayList<Lorg/h2/util/CacheObject;>;
            3   65     3      mem  J
            4   65     5       rc  I
            5   65     6  flushed  Z
            6   65     7     next  Lorg/h2/util/CacheObject;
           14   39     8    check  Lorg/h2/util/CacheObject;
           45   64     8      max  J
           46   64    10     size  I
           49   50    11      rec  Lorg/h2/util/CacheObject;
           59   62    11      rec  Lorg/h2/util/CacheObject;
      Exception table:
        from    to  target  type
          46    53      53  any

  private void addToFront(org.h2.util.CacheObject);
    descriptor: (Lorg/h2/util/CacheObject;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // org.h2.util.CacheObject rec
         0: .line 238
            aload 1 /* rec */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            if_acmpne 2
         1: .line 239
            ldc "try to move head"
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
         2: .line 241
      StackMap locals:
      StackMap stack:
            aload 1 /* rec */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            putfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
         3: .line 242
            aload 1 /* rec */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            getfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
            putfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
         4: .line 243
            aload 1 /* rec */
            getfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
            aload 1 /* rec */
            putfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
         5: .line 244
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            aload 1 /* rec */
            putfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
         6: .line 245
            return
        end local 1 // org.h2.util.CacheObject rec
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lorg/h2/util/CacheLRU;
            0    7     1   rec  Lorg/h2/util/CacheObject;
    MethodParameters:
      Name  Flags
      rec   

  private void removeFromLinkedList(org.h2.util.CacheObject);
    descriptor: (Lorg/h2/util/CacheObject;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // org.h2.util.CacheObject rec
         0: .line 248
            aload 1 /* rec */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            if_acmpne 2
         1: .line 249
            ldc "try to remove head"
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
         2: .line 251
      StackMap locals:
      StackMap stack:
            aload 1 /* rec */
            getfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
            aload 1 /* rec */
            getfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
            putfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
         3: .line 252
            aload 1 /* rec */
            getfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
            aload 1 /* rec */
            getfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
            putfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
         4: .line 255
            aload 1 /* rec */
            aconst_null
            putfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
         5: .line 256
            aload 1 /* rec */
            aconst_null
            putfield org.h2.util.CacheObject.cachePrevious:Lorg/h2/util/CacheObject;
         6: .line 257
            return
        end local 1 // org.h2.util.CacheObject rec
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lorg/h2/util/CacheLRU;
            0    7     1   rec  Lorg/h2/util/CacheObject;
    MethodParameters:
      Name  Flags
      rec   

  public boolean remove(int);
    descriptor: (I)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // int pos
         0: .line 261
            iload 1 /* pos */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.mask:I
            iand
            istore 2 /* index */
        start local 2 // int index
         1: .line 262
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.values:[Lorg/h2/util/CacheObject;
            iload 2 /* index */
            aaload
            astore 3 /* rec */
        start local 3 // org.h2.util.CacheObject rec
         2: .line 263
            aload 3 /* rec */
            ifnonnull 4
         3: .line 264
            iconst_0
            ireturn
         4: .line 266
      StackMap locals: int org.h2.util.CacheObject
      StackMap stack:
            aload 3 /* rec */
            invokevirtual org.h2.util.CacheObject.getPos:()I
            iload 1 /* pos */
            if_icmpne 7
         5: .line 267
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.values:[Lorg/h2/util/CacheObject;
            iload 2 /* index */
            aload 3 /* rec */
            getfield org.h2.util.CacheObject.cacheChained:Lorg/h2/util/CacheObject;
            aastore
         6: .line 268
            goto 13
         7: .line 271
      StackMap locals:
      StackMap stack:
            aload 3 /* rec */
            astore 4 /* last */
        start local 4 // org.h2.util.CacheObject last
         8: .line 272
            aload 3 /* rec */
            getfield org.h2.util.CacheObject.cacheChained:Lorg/h2/util/CacheObject;
            astore 3 /* rec */
         9: .line 273
            aload 3 /* rec */
            ifnonnull 11
        10: .line 274
            iconst_0
            ireturn
        11: .line 276
      StackMap locals: org.h2.util.CacheObject
      StackMap stack:
            aload 3 /* rec */
            invokevirtual org.h2.util.CacheObject.getPos:()I
            iload 1 /* pos */
            if_icmpne 7
        12: .line 277
            aload 4 /* last */
            aload 3 /* rec */
            getfield org.h2.util.CacheObject.cacheChained:Lorg/h2/util/CacheObject;
            putfield org.h2.util.CacheObject.cacheChained:Lorg/h2/util/CacheObject;
        end local 4 // org.h2.util.CacheObject last
        13: .line 279
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            dup
            getfield org.h2.util.CacheLRU.recordCount:I
            iconst_1
            isub
            putfield org.h2.util.CacheLRU.recordCount:I
        14: .line 280
            aload 0 /* this */
            dup
            getfield org.h2.util.CacheLRU.memory:J
            aload 3 /* rec */
            invokevirtual org.h2.util.CacheObject.getMemory:()I
            i2l
            lsub
            putfield org.h2.util.CacheLRU.memory:J
        15: .line 281
            aload 0 /* this */
            aload 3 /* rec */
            invokevirtual org.h2.util.CacheLRU.removeFromLinkedList:(Lorg/h2/util/CacheObject;)V
        16: .line 282
            getstatic org.h2.engine.SysProperties.CHECK:Z
            ifeq 21
        17: .line 283
            aload 3 /* rec */
            aconst_null
            putfield org.h2.util.CacheObject.cacheChained:Lorg/h2/util/CacheObject;
        18: .line 284
            aload 0 /* this */
            iload 1 /* pos */
            invokevirtual org.h2.util.CacheLRU.find:(I)Lorg/h2/util/CacheObject;
            astore 4 /* o */
        start local 4 // org.h2.util.CacheObject o
        19: .line 285
            aload 4 /* o */
            ifnull 21
        20: .line 286
            new java.lang.StringBuilder
            dup
            ldc "not removed: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* o */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.h2.message.DbException.throwInternalError:(Ljava/lang/String;)Ljava/lang/RuntimeException;
            pop
        end local 4 // org.h2.util.CacheObject o
        21: .line 289
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 3 // org.h2.util.CacheObject rec
        end local 2 // int index
        end local 1 // int pos
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   22     0   this  Lorg/h2/util/CacheLRU;
            0   22     1    pos  I
            1   22     2  index  I
            2   22     3    rec  Lorg/h2/util/CacheObject;
            8   13     4   last  Lorg/h2/util/CacheObject;
           19   21     4      o  Lorg/h2/util/CacheObject;
    MethodParameters:
      Name  Flags
      pos   

  public org.h2.util.CacheObject find(int);
    descriptor: (I)Lorg/h2/util/CacheObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // int pos
         0: .line 294
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.values:[Lorg/h2/util/CacheObject;
            iload 1 /* pos */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.mask:I
            iand
            aaload
            astore 2 /* rec */
        start local 2 // org.h2.util.CacheObject rec
         1: .line 295
            goto 3
         2: .line 296
      StackMap locals: org.h2.util.CacheObject
      StackMap stack:
            aload 2 /* rec */
            getfield org.h2.util.CacheObject.cacheChained:Lorg/h2/util/CacheObject;
            astore 2 /* rec */
         3: .line 295
      StackMap locals:
      StackMap stack:
            aload 2 /* rec */
            ifnull 4
            aload 2 /* rec */
            invokevirtual org.h2.util.CacheObject.getPos:()I
            iload 1 /* pos */
            if_icmpne 2
         4: .line 298
      StackMap locals:
      StackMap stack:
            aload 2 /* rec */
            areturn
        end local 2 // org.h2.util.CacheObject rec
        end local 1 // int pos
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/h2/util/CacheLRU;
            0    5     1   pos  I
            1    5     2   rec  Lorg/h2/util/CacheObject;
    MethodParameters:
      Name  Flags
      pos   

  public org.h2.util.CacheObject get(int);
    descriptor: (I)Lorg/h2/util/CacheObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // int pos
         0: .line 303
            aload 0 /* this */
            iload 1 /* pos */
            invokevirtual org.h2.util.CacheLRU.find:(I)Lorg/h2/util/CacheObject;
            astore 2 /* rec */
        start local 2 // org.h2.util.CacheObject rec
         1: .line 304
            aload 2 /* rec */
            ifnull 5
         2: .line 305
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.fifo:Z
            ifne 5
         3: .line 306
            aload 0 /* this */
            aload 2 /* rec */
            invokevirtual org.h2.util.CacheLRU.removeFromLinkedList:(Lorg/h2/util/CacheObject;)V
         4: .line 307
            aload 0 /* this */
            aload 2 /* rec */
            invokevirtual org.h2.util.CacheLRU.addToFront:(Lorg/h2/util/CacheObject;)V
         5: .line 310
      StackMap locals: org.h2.util.CacheObject
      StackMap stack:
            aload 2 /* rec */
            areturn
        end local 2 // org.h2.util.CacheObject rec
        end local 1 // int pos
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lorg/h2/util/CacheLRU;
            0    6     1   pos  I
            1    6     2   rec  Lorg/h2/util/CacheObject;
    MethodParameters:
      Name  Flags
      pos   

  public java.util.ArrayList<org.h2.util.CacheObject> getAllChanged();
    descriptor: ()Ljava/util/ArrayList;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // org.h2.util.CacheLRU this
         0: .line 347
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* list */
        start local 1 // java.util.ArrayList list
         1: .line 348
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            getfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
            astore 2 /* rec */
        start local 2 // org.h2.util.CacheObject rec
         2: .line 349
            goto 6
         3: .line 350
      StackMap locals: java.util.ArrayList org.h2.util.CacheObject
      StackMap stack:
            aload 2 /* rec */
            invokevirtual org.h2.util.CacheObject.isChanged:()Z
            ifeq 5
         4: .line 351
            aload 1 /* list */
            aload 2 /* rec */
            invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
            pop
         5: .line 353
      StackMap locals:
      StackMap stack:
            aload 2 /* rec */
            getfield org.h2.util.CacheObject.cacheNext:Lorg/h2/util/CacheObject;
            astore 2 /* rec */
         6: .line 349
      StackMap locals:
      StackMap stack:
            aload 2 /* rec */
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.head:Lorg/h2/util/CacheObject;
            if_acmpne 3
         7: .line 355
            aload 1 /* list */
            areturn
        end local 2 // org.h2.util.CacheObject rec
        end local 1 // java.util.ArrayList list
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    8     0  this  Lorg/h2/util/CacheLRU;
            1    8     1  list  Ljava/util/ArrayList<Lorg/h2/util/CacheObject;>;
            2    8     2   rec  Lorg/h2/util/CacheObject;
    Signature: ()Ljava/util/ArrayList<Lorg/h2/util/CacheObject;>;

  public void setMaxMemory(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // org.h2.util.CacheLRU this
        start local 1 // int maxKb
         0: .line 360
            iload 1 /* maxKb */
            i2l
            ldc 1024
            lmul
            ldc 4
            ldiv
            lstore 2 /* newSize */
        start local 2 // long newSize
         1: .line 361
            aload 0 /* this */
            lload 2 /* newSize */
            lconst_0
            lcmp
            ifge 2
            lconst_0
            goto 3
      StackMap locals: org.h2.util.CacheLRU int long
      StackMap stack: org.h2.util.CacheLRU
         2: lload 2 /* newSize */
      StackMap locals: org.h2.util.CacheLRU int long
      StackMap stack: org.h2.util.CacheLRU long
         3: putfield org.h2.util.CacheLRU.maxMemory:J
         4: .line 364
            aload 0 /* this */
            invokevirtual org.h2.util.CacheLRU.removeOldIfRequired:()V
         5: .line 365
            return
        end local 2 // long newSize
        end local 1 // int maxKb
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/h2/util/CacheLRU;
            0    6     1    maxKb  I
            1    6     2  newSize  J
    MethodParameters:
       Name  Flags
      maxKb  

  public int getMaxMemory();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.h2.util.CacheLRU this
         0: .line 369
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.maxMemory:J
            ldc 4
            lmul
            ldc 1024
            ldiv
            l2i
            ireturn
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/util/CacheLRU;

  public int getMemory();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.h2.util.CacheLRU this
         0: .line 380
            aload 0 /* this */
            getfield org.h2.util.CacheLRU.memory:J
            ldc 4
            lmul
            ldc 1024
            ldiv
            l2i
            ireturn
        end local 0 // org.h2.util.CacheLRU this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/h2/util/CacheLRU;
}
SourceFile: "CacheLRU.java"