public abstract class org.apache.cassandra.utils.memory.MemtablePool
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: org.apache.cassandra.utils.memory.MemtablePool
  super_class: java.lang.Object
{
  final org.apache.cassandra.utils.memory.MemtableCleanerThread<?> cleaner;
    descriptor: Lorg/apache/cassandra/utils/memory/MemtableCleanerThread;
    flags: (0x0010) ACC_FINAL
    Signature: Lorg/apache/cassandra/utils/memory/MemtableCleanerThread<*>;

  public final org.apache.cassandra.utils.memory.MemtablePool$SubPool onHeap;
    descriptor: Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL

  public final org.apache.cassandra.utils.memory.MemtablePool$SubPool offHeap;
    descriptor: Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL

  public final com.codahale.metrics.Timer blockedOnAllocating;
    descriptor: Lcom/codahale/metrics/Timer;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL

  final org.apache.cassandra.utils.concurrent.WaitQueue hasRoom;
    descriptor: Lorg/apache/cassandra/utils/concurrent/WaitQueue;
    flags: (0x0010) ACC_FINAL

  private static final java.util.concurrent.atomic.AtomicLongFieldUpdater<org.apache.cassandra.utils.memory.MemtablePool$SubPool> reclaimingUpdater;
    descriptor: Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/concurrent/atomic/AtomicLongFieldUpdater<Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;>;

  private static final java.util.concurrent.atomic.AtomicLongFieldUpdater<org.apache.cassandra.utils.memory.MemtablePool$SubPool> allocatedUpdater;
    descriptor: Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/concurrent/atomic/AtomicLongFieldUpdater<Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;>;

  private static final java.util.concurrent.atomic.AtomicLongFieldUpdater<org.apache.cassandra.utils.memory.MemtablePool$SubPool> nextCleanUpdater;
    descriptor: Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/concurrent/atomic/AtomicLongFieldUpdater<Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 237
            ldc Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
            ldc "reclaiming"
            invokestatic java.util.concurrent.atomic.AtomicLongFieldUpdater.newUpdater:(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
            putstatic org.apache.cassandra.utils.memory.MemtablePool.reclaimingUpdater:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
         1: .line 238
            ldc Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
            ldc "allocated"
            invokestatic java.util.concurrent.atomic.AtomicLongFieldUpdater.newUpdater:(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
            putstatic org.apache.cassandra.utils.memory.MemtablePool.allocatedUpdater:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
         2: .line 239
            ldc Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
            ldc "nextClean"
            invokestatic java.util.concurrent.atomic.AtomicLongFieldUpdater.newUpdater:(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
            putstatic org.apache.cassandra.utils.memory.MemtablePool.nextCleanUpdater:Ljava/util/concurrent/atomic/AtomicLongFieldUpdater;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  void <init>(long, long, float, java.lang.Runnable);
    descriptor: (JJFLjava/lang/Runnable;)V
    flags: (0x0000) 
    Code:
      stack=5, locals=7, args_size=5
        start local 0 // org.apache.cassandra.utils.memory.MemtablePool this
        start local 1 // long maxOnHeapMemory
        start local 3 // long maxOffHeapMemory
        start local 5 // float cleanThreshold
        start local 6 // java.lang.Runnable cleaner
         0: .line 50
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 48
            aload 0 /* this */
            new org.apache.cassandra.utils.concurrent.WaitQueue
            dup
            invokespecial org.apache.cassandra.utils.concurrent.WaitQueue.<init>:()V
            putfield org.apache.cassandra.utils.memory.MemtablePool.hasRoom:Lorg/apache/cassandra/utils/concurrent/WaitQueue;
         2: .line 52
            aload 0 /* this */
            aload 0 /* this */
            lload 1 /* maxOnHeapMemory */
            fload 5 /* cleanThreshold */
            invokevirtual org.apache.cassandra.utils.memory.MemtablePool.getSubPool:(JF)Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
            putfield org.apache.cassandra.utils.memory.MemtablePool.onHeap:Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
         3: .line 53
            aload 0 /* this */
            aload 0 /* this */
            lload 3 /* maxOffHeapMemory */
            fload 5 /* cleanThreshold */
            invokevirtual org.apache.cassandra.utils.memory.MemtablePool.getSubPool:(JF)Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
            putfield org.apache.cassandra.utils.memory.MemtablePool.offHeap:Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
         4: .line 54
            aload 0 /* this */
            aload 0 /* this */
            aload 6 /* cleaner */
            invokevirtual org.apache.cassandra.utils.memory.MemtablePool.getCleaner:(Ljava/lang/Runnable;)Lorg/apache/cassandra/utils/memory/MemtableCleanerThread;
            putfield org.apache.cassandra.utils.memory.MemtablePool.cleaner:Lorg/apache/cassandra/utils/memory/MemtableCleanerThread;
         5: .line 55
            aload 0 /* this */
            getstatic org.apache.cassandra.metrics.CassandraMetricsRegistry.Metrics:Lorg/apache/cassandra/metrics/CassandraMetricsRegistry;
            new org.apache.cassandra.metrics.DefaultNameFactory
            dup
            ldc "MemtablePool"
            invokespecial org.apache.cassandra.metrics.DefaultNameFactory.<init>:(Ljava/lang/String;)V
         6: .line 56
            ldc "BlockedOnAllocation"
            invokevirtual org.apache.cassandra.metrics.DefaultNameFactory.createMetricName:(Ljava/lang/String;)Lorg/apache/cassandra/metrics/CassandraMetricsRegistry$MetricName;
         7: .line 55
            invokevirtual org.apache.cassandra.metrics.CassandraMetricsRegistry.timer:(Lorg/apache/cassandra/metrics/CassandraMetricsRegistry$MetricName;)Lcom/codahale/metrics/Timer;
            putfield org.apache.cassandra.utils.memory.MemtablePool.blockedOnAllocating:Lcom/codahale/metrics/Timer;
         8: .line 57
            aload 0 /* this */
            getfield org.apache.cassandra.utils.memory.MemtablePool.cleaner:Lorg/apache/cassandra/utils/memory/MemtableCleanerThread;
            ifnull 10
         9: .line 58
            aload 0 /* this */
            getfield org.apache.cassandra.utils.memory.MemtablePool.cleaner:Lorg/apache/cassandra/utils/memory/MemtableCleanerThread;
            invokevirtual org.apache.cassandra.utils.memory.MemtableCleanerThread.start:()Lorg/apache/cassandra/concurrent/InfiniteLoopExecutor;
            pop
        10: .line 59
      StackMap locals: org.apache.cassandra.utils.memory.MemtablePool long long float java.lang.Runnable
      StackMap stack:
            return
        end local 6 // java.lang.Runnable cleaner
        end local 5 // float cleanThreshold
        end local 3 // long maxOffHeapMemory
        end local 1 // long maxOnHeapMemory
        end local 0 // org.apache.cassandra.utils.memory.MemtablePool this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   11     0              this  Lorg/apache/cassandra/utils/memory/MemtablePool;
            0   11     1   maxOnHeapMemory  J
            0   11     3  maxOffHeapMemory  J
            0   11     5    cleanThreshold  F
            0   11     6           cleaner  Ljava/lang/Runnable;
    MethodParameters:
                  Name  Flags
      maxOnHeapMemory   
      maxOffHeapMemory  
      cleanThreshold    
      cleaner           

  org.apache.cassandra.utils.memory.MemtablePool$SubPool getSubPool(long, float);
    descriptor: (JF)Lorg/apache/cassandra/utils/memory/MemtablePool$SubPool;
    flags: (0x0000) 
    Code:
      stack=6, locals=4, args_size=3
        start local 0 // org.apache.cassandra.utils.memory.MemtablePool this
        start local 1 // long limit
        start local 3 // float cleanThreshold
         0: .line 63
            new org.apache.cassandra.utils.memory.MemtablePool$SubPool
            dup
            aload 0 /* this */
            lload 1 /* limit */
            fload 3 /* cleanThreshold */
            invokespecial org.apache.cassandra.utils.memory.MemtablePool$SubPool.<init>:(Lorg/apache/cassandra/utils/memory/MemtablePool;JF)V
            areturn
        end local 3 // float cleanThreshold
        end local 1 // long limit
        end local 0 // org.apache.cassandra.utils.memory.MemtablePool this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    1     0            this  Lorg/apache/cassandra/utils/memory/MemtablePool;
            0    1     1           limit  J
            0    1     3  cleanThreshold  F
    MethodParameters:
                Name  Flags
      limit           
      cleanThreshold  

  org.apache.cassandra.utils.memory.MemtableCleanerThread<?> getCleaner(java.lang.Runnable);
    descriptor: (Ljava/lang/Runnable;)Lorg/apache/cassandra/utils/memory/MemtableCleanerThread;
    flags: (0x0000) 
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.apache.cassandra.utils.memory.MemtablePool this
        start local 1 // java.lang.Runnable cleaner
         0: .line 68
            aload 1 /* cleaner */
            ifnonnull 1
            aconst_null
            goto 2
      StackMap locals:
      StackMap stack:
         1: new org.apache.cassandra.utils.memory.MemtableCleanerThread
            dup
            aload 0 /* this */
            aload 1 /* cleaner */
            invokespecial org.apache.cassandra.utils.memory.MemtableCleanerThread.<init>:(Lorg/apache/cassandra/utils/memory/MemtablePool;Ljava/lang/Runnable;)V
      StackMap locals:
      StackMap stack: org.apache.cassandra.utils.memory.MemtableCleanerThread
         2: areturn
        end local 1 // java.lang.Runnable cleaner
        end local 0 // org.apache.cassandra.utils.memory.MemtablePool this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/apache/cassandra/utils/memory/MemtablePool;
            0    3     1  cleaner  Ljava/lang/Runnable;
    Signature: (Ljava/lang/Runnable;)Lorg/apache/cassandra/utils/memory/MemtableCleanerThread<*>;
    MethodParameters:
         Name  Flags
      cleaner  

  public void shutdownAndWait(long, java.util.concurrent.TimeUnit);
    descriptor: (JLjava/util/concurrent/TimeUnit;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=4, args_size=3
        start local 0 // org.apache.cassandra.utils.memory.MemtablePool this
        start local 1 // long timeout
        start local 3 // java.util.concurrent.TimeUnit unit
         0: .line 74
            lload 1 /* timeout */
            aload 3 /* unit */
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            getfield org.apache.cassandra.utils.memory.MemtablePool.cleaner:Lorg/apache/cassandra/utils/memory/MemtableCleanerThread;
            aastore
            invokestatic org.apache.cassandra.utils.ExecutorUtils.shutdownNowAndWait:(JLjava/util/concurrent/TimeUnit;[Ljava/lang/Object;)V
         1: .line 75
            return
        end local 3 // java.util.concurrent.TimeUnit unit
        end local 1 // long timeout
        end local 0 // org.apache.cassandra.utils.memory.MemtablePool this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/apache/cassandra/utils/memory/MemtablePool;
            0    2     1  timeout  J
            0    2     3     unit  Ljava/util/concurrent/TimeUnit;
    Exceptions:
      throws java.lang.InterruptedException, java.util.concurrent.TimeoutException
    RuntimeInvisibleAnnotations: 
      com.google.common.annotations.VisibleForTesting()
    MethodParameters:
         Name  Flags
      timeout  
      unit     

  public abstract org.apache.cassandra.utils.memory.MemtableAllocator newAllocator();
    descriptor: ()Lorg/apache/cassandra/utils/memory/MemtableAllocator;
    flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
}
SourceFile: "MemtablePool.java"
NestMembers:
  org.apache.cassandra.utils.memory.MemtablePool$SubPool
InnerClasses:
  public MetricName = org.apache.cassandra.metrics.CassandraMetricsRegistry$MetricName of org.apache.cassandra.metrics.CassandraMetricsRegistry
  public SubPool = org.apache.cassandra.utils.memory.MemtablePool$SubPool of org.apache.cassandra.utils.memory.MemtablePool