public class org.apache.lucene.search.SearcherLifetimeManager implements java.io.Closeable
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.lucene.search.SearcherLifetimeManager
  super_class: java.lang.Object
{
  static final double NANOS_PER_SEC;
    descriptor: D
    flags: (0x0018) ACC_STATIC, ACC_FINAL
    ConstantValue: 1.0E9

  private volatile boolean closed;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private final java.util.concurrent.ConcurrentHashMap<java.lang.Long, org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker> searchers;
    descriptor: Ljava/util/concurrent/ConcurrentHashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentHashMap<Ljava/lang/Long;Lorg/apache/lucene/search/SearcherLifetimeManager$SearcherTracker;>;

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.lucene.search.SearcherLifetimeManager this
         0: .line 100
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 135
            aload 0 /* this */
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
         2: .line 100
            return
        end local 0 // org.apache.lucene.search.SearcherLifetimeManager this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/lucene/search/SearcherLifetimeManager;

  private void ensureOpen();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.lucene.search.SearcherLifetimeManager this
         0: .line 138
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.closed:Z
            ifeq 2
         1: .line 139
            new org.apache.lucene.store.AlreadyClosedException
            dup
            ldc "this SearcherLifetimeManager instance is closed"
            invokespecial org.apache.lucene.store.AlreadyClosedException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 141
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.apache.lucene.search.SearcherLifetimeManager this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/lucene/search/SearcherLifetimeManager;

  public long record(org.apache.lucene.search.IndexSearcher);
    descriptor: (Lorg/apache/lucene/search/IndexSearcher;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=5, args_size=2
        start local 0 // org.apache.lucene.search.SearcherLifetimeManager this
        start local 1 // org.apache.lucene.search.IndexSearcher searcher
         0: .line 156
            aload 0 /* this */
            invokevirtual org.apache.lucene.search.SearcherLifetimeManager.ensureOpen:()V
         1: .line 160
            aload 1 /* searcher */
            invokevirtual org.apache.lucene.search.IndexSearcher.getIndexReader:()Lorg/apache/lucene/index/IndexReader;
            checkcast org.apache.lucene.index.DirectoryReader
            invokevirtual org.apache.lucene.index.DirectoryReader.getVersion:()J
            lstore 2 /* version */
        start local 2 // long version
         2: .line 161
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
            lload 2 /* version */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
            astore 4 /* tracker */
        start local 4 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
         3: .line 162
            aload 4 /* tracker */
            ifnonnull 8
         4: .line 164
            new org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
            dup
            aload 1 /* searcher */
            invokespecial org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.<init>:(Lorg/apache/lucene/search/IndexSearcher;)V
            astore 4 /* tracker */
         5: .line 165
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
            lload 2 /* version */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            aload 4 /* tracker */
            invokevirtual java.util.concurrent.ConcurrentHashMap.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            ifnull 10
         6: .line 168
            aload 4 /* tracker */
            invokevirtual org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.close:()V
         7: .line 170
            goto 10
      StackMap locals: long org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
      StackMap stack:
         8: aload 4 /* tracker */
            getfield org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.searcher:Lorg/apache/lucene/search/IndexSearcher;
            aload 1 /* searcher */
            if_acmpeq 10
         9: .line 171
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "the provided searcher has the same underlying reader version yet the searcher instance differs from before (new="
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* searcher */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " vs old="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 4 /* tracker */
            getfield org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.searcher:Lorg/apache/lucene/search/IndexSearcher;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 174
      StackMap locals:
      StackMap stack:
            lload 2 /* version */
            lreturn
        end local 4 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
        end local 2 // long version
        end local 1 // org.apache.lucene.search.IndexSearcher searcher
        end local 0 // org.apache.lucene.search.SearcherLifetimeManager this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   11     0      this  Lorg/apache/lucene/search/SearcherLifetimeManager;
            0   11     1  searcher  Lorg/apache/lucene/search/IndexSearcher;
            2   11     2   version  J
            3   11     4   tracker  Lorg/apache/lucene/search/SearcherLifetimeManager$SearcherTracker;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
          Name  Flags
      searcher  

  public org.apache.lucene.search.IndexSearcher acquire(long);
    descriptor: (J)Lorg/apache/lucene/search/IndexSearcher;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // org.apache.lucene.search.SearcherLifetimeManager this
        start local 1 // long version
         0: .line 190
            aload 0 /* this */
            invokevirtual org.apache.lucene.search.SearcherLifetimeManager.ensureOpen:()V
         1: .line 191
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
            lload 1 /* version */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual java.util.concurrent.ConcurrentHashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
            astore 3 /* tracker */
        start local 3 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
         2: .line 192
            aload 3 /* tracker */
            ifnull 5
         3: .line 193
            aload 3 /* tracker */
            getfield org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.searcher:Lorg/apache/lucene/search/IndexSearcher;
            invokevirtual org.apache.lucene.search.IndexSearcher.getIndexReader:()Lorg/apache/lucene/index/IndexReader;
            invokevirtual org.apache.lucene.index.IndexReader.tryIncRef:()Z
            ifeq 5
         4: .line 194
            aload 3 /* tracker */
            getfield org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.searcher:Lorg/apache/lucene/search/IndexSearcher;
            areturn
         5: .line 197
      StackMap locals: org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
      StackMap stack:
            aconst_null
            areturn
        end local 3 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
        end local 1 // long version
        end local 0 // org.apache.lucene.search.SearcherLifetimeManager this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/apache/lucene/search/SearcherLifetimeManager;
            0    6     1  version  J
            2    6     3  tracker  Lorg/apache/lucene/search/SearcherLifetimeManager$SearcherTracker;
    MethodParameters:
         Name  Flags
      version  

  public void release(org.apache.lucene.search.IndexSearcher);
    descriptor: (Lorg/apache/lucene/search/IndexSearcher;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.apache.lucene.search.SearcherLifetimeManager this
        start local 1 // org.apache.lucene.search.IndexSearcher s
         0: .line 205
            aload 1 /* s */
            invokevirtual org.apache.lucene.search.IndexSearcher.getIndexReader:()Lorg/apache/lucene/index/IndexReader;
            invokevirtual org.apache.lucene.index.IndexReader.decRef:()V
         1: .line 206
            return
        end local 1 // org.apache.lucene.search.IndexSearcher s
        end local 0 // org.apache.lucene.search.SearcherLifetimeManager this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/apache/lucene/search/SearcherLifetimeManager;
            0    2     1     s  Lorg/apache/lucene/search/IndexSearcher;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      s     

  public synchronized void prune(org.apache.lucene.search.SearcherLifetimeManager$Pruner);
    descriptor: (Lorg/apache/lucene/search/SearcherLifetimeManager$Pruner;)V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=11, args_size=2
        start local 0 // org.apache.lucene.search.SearcherLifetimeManager this
        start local 1 // org.apache.lucene.search.SearcherLifetimeManager$Pruner pruner
         0: .line 249
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* trackers */
        start local 2 // java.util.List trackers
         1: .line 250
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.values:()Ljava/util/Collection;
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 4
            goto 4
      StackMap locals: org.apache.lucene.search.SearcherLifetimeManager org.apache.lucene.search.SearcherLifetimeManager$Pruner java.util.List top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
            astore 3 /* tracker */
        start local 3 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
         3: .line 251
            aload 2 /* trackers */
            aload 3 /* tracker */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 3 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
         4: .line 250
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 253
            aload 2 /* trackers */
            invokestatic java.util.Collections.sort:(Ljava/util/List;)V
         6: .line 254
            dconst_0
            dstore 3 /* lastRecordTimeSec */
        start local 3 // double lastRecordTimeSec
         7: .line 255
            invokestatic java.lang.System.nanoTime:()J
            l2d
            ldc 1.0E9
            ddiv
            dstore 5 /* now */
        start local 5 // double now
         8: .line 256
            aload 2 /* trackers */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 8
            goto 18
      StackMap locals: org.apache.lucene.search.SearcherLifetimeManager org.apache.lucene.search.SearcherLifetimeManager$Pruner java.util.List double double top java.util.Iterator
      StackMap stack:
         9: aload 8
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
            astore 7 /* tracker */
        start local 7 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
        10: .line 258
            dload 3 /* lastRecordTimeSec */
            dconst_0
            dcmpl
            ifne 13
        11: .line 259
            dconst_0
            dstore 9 /* ageSec */
        start local 9 // double ageSec
        12: .line 260
            goto 14
        end local 9 // double ageSec
        13: .line 261
      StackMap locals: org.apache.lucene.search.SearcherLifetimeManager org.apache.lucene.search.SearcherLifetimeManager$Pruner java.util.List double double org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker java.util.Iterator
      StackMap stack:
            dload 5 /* now */
            dload 3 /* lastRecordTimeSec */
            dsub
            dstore 9 /* ageSec */
        start local 9 // double ageSec
        14: .line 267
      StackMap locals: double
      StackMap stack:
            aload 1 /* pruner */
            dload 9 /* ageSec */
            aload 7 /* tracker */
            getfield org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.searcher:Lorg/apache/lucene/search/IndexSearcher;
            invokeinterface org.apache.lucene.search.SearcherLifetimeManager$Pruner.doPrune:(DLorg/apache/lucene/search/IndexSearcher;)Z
            ifeq 17
        15: .line 269
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
            aload 7 /* tracker */
            getfield org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.version:J
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual java.util.concurrent.ConcurrentHashMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
        16: .line 270
            aload 7 /* tracker */
            invokevirtual org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.close:()V
        17: .line 272
      StackMap locals:
      StackMap stack:
            aload 7 /* tracker */
            getfield org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.recordTimeSec:D
            dstore 3 /* lastRecordTimeSec */
        end local 9 // double ageSec
        end local 7 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
        18: .line 256
      StackMap locals: org.apache.lucene.search.SearcherLifetimeManager org.apache.lucene.search.SearcherLifetimeManager$Pruner java.util.List double double top java.util.Iterator
      StackMap stack:
            aload 8
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 9
        19: .line 274
            return
        end local 5 // double now
        end local 3 // double lastRecordTimeSec
        end local 2 // java.util.List trackers
        end local 1 // org.apache.lucene.search.SearcherLifetimeManager$Pruner pruner
        end local 0 // org.apache.lucene.search.SearcherLifetimeManager this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   20     0               this  Lorg/apache/lucene/search/SearcherLifetimeManager;
            0   20     1             pruner  Lorg/apache/lucene/search/SearcherLifetimeManager$Pruner;
            1   20     2           trackers  Ljava/util/List<Lorg/apache/lucene/search/SearcherLifetimeManager$SearcherTracker;>;
            3    4     3            tracker  Lorg/apache/lucene/search/SearcherLifetimeManager$SearcherTracker;
            7   20     3  lastRecordTimeSec  D
            8   20     5                now  D
           10   18     7            tracker  Lorg/apache/lucene/search/SearcherLifetimeManager$SearcherTracker;
           12   13     9             ageSec  D
           14   18     9             ageSec  D
    Exceptions:
      throws java.io.IOException
    MethodParameters:
        Name  Flags
      pruner  

  public synchronized void close();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // org.apache.lucene.search.SearcherLifetimeManager this
         0: .line 287
            aload 0 /* this */
            iconst_1
            putfield org.apache.lucene.search.SearcherLifetimeManager.closed:Z
         1: .line 288
            new java.util.ArrayList
            dup
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.values:()Ljava/util/Collection;
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            astore 1 /* toClose */
        start local 1 // java.util.List toClose
         2: .line 292
            aload 1 /* toClose */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 5
      StackMap locals: org.apache.lucene.search.SearcherLifetimeManager java.util.List top java.util.Iterator
      StackMap stack:
         3: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
            astore 2 /* tracker */
        start local 2 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
         4: .line 293
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
            aload 2 /* tracker */
            getfield org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker.version:J
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual java.util.concurrent.ConcurrentHashMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
        end local 2 // org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker tracker
         5: .line 292
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 3
         6: .line 296
            aload 1 /* toClose */
            invokestatic org.apache.lucene.util.IOUtils.close:(Ljava/lang/Iterable;)V
         7: .line 299
            aload 0 /* this */
            getfield org.apache.lucene.search.SearcherLifetimeManager.searchers:Ljava/util/concurrent/ConcurrentHashMap;
            invokevirtual java.util.concurrent.ConcurrentHashMap.size:()I
            ifeq 9
         8: .line 300
            new java.lang.IllegalStateException
            dup
            ldc "another thread called record while this SearcherLifetimeManager instance was being closed; not all searchers were closed"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 302
      StackMap locals: org.apache.lucene.search.SearcherLifetimeManager java.util.List
      StackMap stack:
            return
        end local 1 // java.util.List toClose
        end local 0 // org.apache.lucene.search.SearcherLifetimeManager this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   10     0     this  Lorg/apache/lucene/search/SearcherLifetimeManager;
            2   10     1  toClose  Ljava/util/List<Lorg/apache/lucene/search/SearcherLifetimeManager$SearcherTracker;>;
            4    5     2  tracker  Lorg/apache/lucene/search/SearcherLifetimeManager$SearcherTracker;
    Exceptions:
      throws java.io.IOException
}
SourceFile: "SearcherLifetimeManager.java"
NestMembers:
  org.apache.lucene.search.SearcherLifetimeManager$PruneByAge  org.apache.lucene.search.SearcherLifetimeManager$Pruner  org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker
InnerClasses:
  public final PruneByAge = org.apache.lucene.search.SearcherLifetimeManager$PruneByAge of org.apache.lucene.search.SearcherLifetimeManager
  public abstract Pruner = org.apache.lucene.search.SearcherLifetimeManager$Pruner of org.apache.lucene.search.SearcherLifetimeManager
  private SearcherTracker = org.apache.lucene.search.SearcherLifetimeManager$SearcherTracker of org.apache.lucene.search.SearcherLifetimeManager