public class io.netty.util.HashedWheelTimer implements io.netty.util.Timer
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: io.netty.util.HashedWheelTimer
super_class: java.lang.Object
{
static final io.netty.util.internal.logging.InternalLogger logger;
descriptor: Lio/netty/util/internal/logging/InternalLogger;
flags: (0x0018) ACC_STATIC, ACC_FINAL
private static final java.util.concurrent.atomic.AtomicInteger INSTANCE_COUNTER;
descriptor: Ljava/util/concurrent/atomic/AtomicInteger;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final java.util.concurrent.atomic.AtomicBoolean WARNED_TOO_MANY_INSTANCES;
descriptor: Ljava/util/concurrent/atomic/AtomicBoolean;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final int INSTANCE_COUNT_LIMIT;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 64
private static final io.netty.util.ResourceLeakDetector<io.netty.util.HashedWheelTimer> leakDetector;
descriptor: Lio/netty/util/ResourceLeakDetector;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Lio/netty/util/ResourceLeakDetector<Lio/netty/util/HashedWheelTimer;>;
private static final java.util.concurrent.atomic.AtomicIntegerFieldUpdater<io.netty.util.HashedWheelTimer> WORKER_STATE_UPDATER;
descriptor: Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater<Lio/netty/util/HashedWheelTimer;>;
private final io.netty.util.ResourceLeakTracker<io.netty.util.HashedWheelTimer> leak;
descriptor: Lio/netty/util/ResourceLeakTracker;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Lio/netty/util/ResourceLeakTracker<Lio/netty/util/HashedWheelTimer;>;
private final io.netty.util.HashedWheelTimer$Worker worker;
descriptor: Lio/netty/util/HashedWheelTimer$Worker;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.lang.Thread workerThread;
descriptor: Ljava/lang/Thread;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
public static final int WORKER_STATE_INIT;
descriptor: I
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
ConstantValue: 0
public static final int WORKER_STATE_STARTED;
descriptor: I
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
ConstantValue: 1
public static final int WORKER_STATE_SHUTDOWN;
descriptor: I
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
ConstantValue: 2
private volatile int workerState;
descriptor: I
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
private final long tickDuration;
descriptor: J
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final io.netty.util.HashedWheelTimer$HashedWheelBucket[] wheel;
descriptor: [Lio/netty/util/HashedWheelTimer$HashedWheelBucket;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final int mask;
descriptor: I
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.concurrent.CountDownLatch startTimeInitialized;
descriptor: Ljava/util/concurrent/CountDownLatch;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.Queue<io.netty.util.HashedWheelTimer$HashedWheelTimeout> timeouts;
descriptor: Ljava/util/Queue;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Ljava/util/Queue<Lio/netty/util/HashedWheelTimer$HashedWheelTimeout;>;
private final java.util.Queue<io.netty.util.HashedWheelTimer$HashedWheelTimeout> cancelledTimeouts;
descriptor: Ljava/util/Queue;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Ljava/util/Queue<Lio/netty/util/HashedWheelTimer$HashedWheelTimeout;>;
private final java.util.concurrent.atomic.AtomicLong pendingTimeouts;
descriptor: Ljava/util/concurrent/atomic/AtomicLong;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final long maxPendingTimeouts;
descriptor: J
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private volatile long startTime;
descriptor: J
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
static final boolean $assertionsDisabled;
descriptor: Z
flags: (0x1018) ACC_STATIC, ACC_FINAL, ACC_SYNTHETIC
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=3, locals=0, args_size=0
0: ldc Lio/netty/util/HashedWheelTimer;
invokevirtual java.lang.Class.desiredAssertionStatus:()Z
ifne 1
iconst_1
goto 2
StackMap locals:
StackMap stack:
1: iconst_0
StackMap locals:
StackMap stack: int
2: putstatic io.netty.util.HashedWheelTimer.$assertionsDisabled:Z
3: ldc Lio/netty/util/HashedWheelTimer;
invokestatic io.netty.util.internal.logging.InternalLoggerFactory.getInstance:(Ljava/lang/Class;)Lio/netty/util/internal/logging/InternalLogger;
4: putstatic io.netty.util.HashedWheelTimer.logger:Lio/netty/util/internal/logging/InternalLogger;
5: new java.util.concurrent.atomic.AtomicInteger
dup
invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:()V
putstatic io.netty.util.HashedWheelTimer.INSTANCE_COUNTER:Ljava/util/concurrent/atomic/AtomicInteger;
6: new java.util.concurrent.atomic.AtomicBoolean
dup
invokespecial java.util.concurrent.atomic.AtomicBoolean.<init>:()V
putstatic io.netty.util.HashedWheelTimer.WARNED_TOO_MANY_INSTANCES:Ljava/util/concurrent/atomic/AtomicBoolean;
7: invokestatic io.netty.util.ResourceLeakDetectorFactory.instance:()Lio/netty/util/ResourceLeakDetectorFactory;
8: ldc Lio/netty/util/HashedWheelTimer;
iconst_1
invokevirtual io.netty.util.ResourceLeakDetectorFactory.newResourceLeakDetector:(Ljava/lang/Class;I)Lio/netty/util/ResourceLeakDetector;
9: putstatic io.netty.util.HashedWheelTimer.leakDetector:Lio/netty/util/ResourceLeakDetector;
10: ldc Lio/netty/util/HashedWheelTimer;
ldc "workerState"
invokestatic java.util.concurrent.atomic.AtomicIntegerFieldUpdater.newUpdater:(Ljava/lang/Class;Ljava/lang/String;)Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
11: putstatic io.netty.util.HashedWheelTimer.WORKER_STATE_UPDATER:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
12: return
LocalVariableTable:
Start End Slot Name Signature
public void <init>();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
invokestatic java.util.concurrent.Executors.defaultThreadFactory:()Ljava/util/concurrent/ThreadFactory;
invokespecial io.netty.util.HashedWheelTimer.<init>:(Ljava/util/concurrent/ThreadFactory;)V
1: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lio/netty/util/HashedWheelTimer;
public void <init>(long, java.util.concurrent.TimeUnit);
descriptor: (JLjava/util/concurrent/TimeUnit;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=4, args_size=3
start local 0 start local 1 start local 3 0: aload 0
invokestatic java.util.concurrent.Executors.defaultThreadFactory:()Ljava/util/concurrent/ThreadFactory;
lload 1
aload 3
invokespecial io.netty.util.HashedWheelTimer.<init>:(Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;)V
1: return
end local 3 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lio/netty/util/HashedWheelTimer;
0 2 1 tickDuration J
0 2 3 unit Ljava/util/concurrent/TimeUnit;
MethodParameters:
Name Flags
tickDuration
unit
public void <init>(long, java.util.concurrent.TimeUnit, int);
descriptor: (JLjava/util/concurrent/TimeUnit;I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=5, args_size=4
start local 0 start local 1 start local 3 start local 4 0: aload 0
invokestatic java.util.concurrent.Executors.defaultThreadFactory:()Ljava/util/concurrent/ThreadFactory;
lload 1
aload 3
iload 4
invokespecial io.netty.util.HashedWheelTimer.<init>:(Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;I)V
1: return
end local 4 end local 3 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lio/netty/util/HashedWheelTimer;
0 2 1 tickDuration J
0 2 3 unit Ljava/util/concurrent/TimeUnit;
0 2 4 ticksPerWheel I
MethodParameters:
Name Flags
tickDuration
unit
ticksPerWheel
public void <init>(java.util.concurrent.ThreadFactory);
descriptor: (Ljava/util/concurrent/ThreadFactory;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=2, args_size=2
start local 0 start local 1 0: aload 0
aload 1
ldc 100
getstatic java.util.concurrent.TimeUnit.MILLISECONDS:Ljava/util/concurrent/TimeUnit;
invokespecial io.netty.util.HashedWheelTimer.<init>:(Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lio/netty/util/HashedWheelTimer;
0 2 1 threadFactory Ljava/util/concurrent/ThreadFactory;
MethodParameters:
Name Flags
threadFactory
public void <init>(java.util.concurrent.ThreadFactory, long, java.util.concurrent.TimeUnit);
descriptor: (Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=5, args_size=4
start local 0 start local 1 start local 2 start local 4 0: aload 0
aload 1
lload 2
aload 4
sipush 512
invokespecial io.netty.util.HashedWheelTimer.<init>:(Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;I)V
1: return
end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lio/netty/util/HashedWheelTimer;
0 2 1 threadFactory Ljava/util/concurrent/ThreadFactory;
0 2 2 tickDuration J
0 2 4 unit Ljava/util/concurrent/TimeUnit;
MethodParameters:
Name Flags
threadFactory
tickDuration
unit
public void <init>(java.util.concurrent.ThreadFactory, long, java.util.concurrent.TimeUnit, int);
descriptor: (Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=6, args_size=5
start local 0 start local 1 start local 2 start local 4 start local 5 0: aload 0
aload 1
lload 2
aload 4
iload 5
iconst_1
invokespecial io.netty.util.HashedWheelTimer.<init>:(Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;IZ)V
1: return
end local 5 end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lio/netty/util/HashedWheelTimer;
0 2 1 threadFactory Ljava/util/concurrent/ThreadFactory;
0 2 2 tickDuration J
0 2 4 unit Ljava/util/concurrent/TimeUnit;
0 2 5 ticksPerWheel I
MethodParameters:
Name Flags
threadFactory
tickDuration
unit
ticksPerWheel
public void <init>(java.util.concurrent.ThreadFactory, long, java.util.concurrent.TimeUnit, int, boolean);
descriptor: (Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;IZ)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=9, locals=7, args_size=6
start local 0 start local 1 start local 2 start local 4 start local 5 start local 6 0: aload 0
aload 1
lload 2
aload 4
iload 5
iload 6
ldc -1
invokespecial io.netty.util.HashedWheelTimer.<init>:(Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;IZJ)V
1: return
end local 6 end local 5 end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lio/netty/util/HashedWheelTimer;
0 2 1 threadFactory Ljava/util/concurrent/ThreadFactory;
0 2 2 tickDuration J
0 2 4 unit Ljava/util/concurrent/TimeUnit;
0 2 5 ticksPerWheel I
0 2 6 leakDetection Z
MethodParameters:
Name Flags
threadFactory
tickDuration
unit
ticksPerWheel
leakDetection
public void <init>(java.util.concurrent.ThreadFactory, long, java.util.concurrent.TimeUnit, int, boolean, long);
descriptor: (Ljava/util/concurrent/ThreadFactory;JLjava/util/concurrent/TimeUnit;IZJ)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=10, locals=9, args_size=7
start local 0 start local 1 start local 2 start local 4 start local 5 start local 6 start local 7 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new io.netty.util.HashedWheelTimer$Worker
dup
aload 0
invokespecial io.netty.util.HashedWheelTimer$Worker.<init>:(Lio/netty/util/HashedWheelTimer;)V
putfield io.netty.util.HashedWheelTimer.worker:Lio/netty/util/HashedWheelTimer$Worker;
2: aload 0
new java.util.concurrent.CountDownLatch
dup
iconst_1
invokespecial java.util.concurrent.CountDownLatch.<init>:(I)V
putfield io.netty.util.HashedWheelTimer.startTimeInitialized:Ljava/util/concurrent/CountDownLatch;
3: aload 0
invokestatic io.netty.util.internal.PlatformDependent.newMpscQueue:()Ljava/util/Queue;
putfield io.netty.util.HashedWheelTimer.timeouts:Ljava/util/Queue;
4: aload 0
invokestatic io.netty.util.internal.PlatformDependent.newMpscQueue:()Ljava/util/Queue;
putfield io.netty.util.HashedWheelTimer.cancelledTimeouts:Ljava/util/Queue;
5: aload 0
new java.util.concurrent.atomic.AtomicLong
dup
lconst_0
invokespecial java.util.concurrent.atomic.AtomicLong.<init>:(J)V
putfield io.netty.util.HashedWheelTimer.pendingTimeouts:Ljava/util/concurrent/atomic/AtomicLong;
6: aload 1
ifnonnull 8
7: new java.lang.NullPointerException
dup
ldc "threadFactory"
invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
athrow
8: StackMap locals: io.netty.util.HashedWheelTimer java.util.concurrent.ThreadFactory long java.util.concurrent.TimeUnit int int long
StackMap stack:
aload 4
ifnonnull 10
9: new java.lang.NullPointerException
dup
ldc "unit"
invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
athrow
10: StackMap locals:
StackMap stack:
lload 2
lconst_0
lcmp
ifgt 12
11: new java.lang.IllegalArgumentException
dup
new java.lang.StringBuilder
dup
ldc "tickDuration must be greater than 0: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
lload 2
invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
12: StackMap locals:
StackMap stack:
iload 5
ifgt 14
13: new java.lang.IllegalArgumentException
dup
new java.lang.StringBuilder
dup
ldc "ticksPerWheel must be greater than 0: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 5
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
14: StackMap locals:
StackMap stack:
aload 0
iload 5
invokestatic io.netty.util.HashedWheelTimer.createWheel:(I)[Lio/netty/util/HashedWheelTimer$HashedWheelBucket;
putfield io.netty.util.HashedWheelTimer.wheel:[Lio/netty/util/HashedWheelTimer$HashedWheelBucket;
15: aload 0
aload 0
getfield io.netty.util.HashedWheelTimer.wheel:[Lio/netty/util/HashedWheelTimer$HashedWheelBucket;
arraylength
iconst_1
isub
putfield io.netty.util.HashedWheelTimer.mask:I
16: aload 0
aload 4
lload 2
invokevirtual java.util.concurrent.TimeUnit.toNanos:(J)J
putfield io.netty.util.HashedWheelTimer.tickDuration:J
17: aload 0
getfield io.netty.util.HashedWheelTimer.tickDuration:J
ldc 9223372036854775807
aload 0
getfield io.netty.util.HashedWheelTimer.wheel:[Lio/netty/util/HashedWheelTimer$HashedWheelBucket;
arraylength
i2l
ldiv
lcmp
iflt 22
18: new java.lang.IllegalArgumentException
dup
19: ldc "tickDuration: %d (expected: 0 < tickDuration in nanos < %d"
iconst_2
anewarray java.lang.Object
dup
iconst_0
20: lload 2
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
aastore
dup
iconst_1
ldc 9223372036854775807
aload 0
getfield io.netty.util.HashedWheelTimer.wheel:[Lio/netty/util/HashedWheelTimer$HashedWheelBucket;
arraylength
i2l
ldiv
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
aastore
21: invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
22: StackMap locals:
StackMap stack:
aload 0
aload 1
aload 0
getfield io.netty.util.HashedWheelTimer.worker:Lio/netty/util/HashedWheelTimer$Worker;
invokeinterface java.util.concurrent.ThreadFactory.newThread:(Ljava/lang/Runnable;)Ljava/lang/Thread;
putfield io.netty.util.HashedWheelTimer.workerThread:Ljava/lang/Thread;
23: aload 0
iload 6
ifne 24
aload 0
getfield io.netty.util.HashedWheelTimer.workerThread:Ljava/lang/Thread;
invokevirtual java.lang.Thread.isDaemon:()Z
ifne 25
StackMap locals:
StackMap stack: io.netty.util.HashedWheelTimer
24: getstatic io.netty.util.HashedWheelTimer.leakDetector:Lio/netty/util/ResourceLeakDetector;
aload 0
invokevirtual io.netty.util.ResourceLeakDetector.track:(Ljava/lang/Object;)Lio/netty/util/ResourceLeakTracker;
goto 26
StackMap locals:
StackMap stack: io.netty.util.HashedWheelTimer
25: aconst_null
StackMap locals: io.netty.util.HashedWheelTimer java.util.concurrent.ThreadFactory long java.util.concurrent.TimeUnit int int long
StackMap stack: io.netty.util.HashedWheelTimer io.netty.util.ResourceLeakTracker
26: putfield io.netty.util.HashedWheelTimer.leak:Lio/netty/util/ResourceLeakTracker;
27: aload 0
lload 7
putfield io.netty.util.HashedWheelTimer.maxPendingTimeouts:J
28: getstatic io.netty.util.HashedWheelTimer.INSTANCE_COUNTER:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.incrementAndGet:()I
bipush 64
if_icmple 31
29: getstatic io.netty.util.HashedWheelTimer.WARNED_TOO_MANY_INSTANCES:Ljava/util/concurrent/atomic/AtomicBoolean;
iconst_0
iconst_1
invokevirtual java.util.concurrent.atomic.AtomicBoolean.compareAndSet:(ZZ)Z
ifeq 31
30: invokestatic io.netty.util.HashedWheelTimer.reportTooManyInstances:()V
31: StackMap locals:
StackMap stack:
return
end local 7 end local 6 end local 5 end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 32 0 this Lio/netty/util/HashedWheelTimer;
0 32 1 threadFactory Ljava/util/concurrent/ThreadFactory;
0 32 2 tickDuration J
0 32 4 unit Ljava/util/concurrent/TimeUnit;
0 32 5 ticksPerWheel I
0 32 6 leakDetection Z
0 32 7 maxPendingTimeouts J
MethodParameters:
Name Flags
threadFactory
tickDuration
unit
ticksPerWheel
leakDetection
maxPendingTimeouts
protected void finalize();
descriptor: ()V
flags: (0x0004) ACC_PROTECTED
Code:
stack=3, locals=2, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.finalize:()V
1: goto 6
StackMap locals:
StackMap stack: java.lang.Throwable
2: astore 1
3: getstatic io.netty.util.HashedWheelTimer.WORKER_STATE_UPDATER:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
aload 0
iconst_2
invokevirtual java.util.concurrent.atomic.AtomicIntegerFieldUpdater.getAndSet:(Ljava/lang/Object;I)I
iconst_2
if_icmpeq 5
4: getstatic io.netty.util.HashedWheelTimer.INSTANCE_COUNTER:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.decrementAndGet:()I
pop
5: StackMap locals: java.lang.Throwable
StackMap stack:
aload 1
athrow
6: StackMap locals:
StackMap stack:
getstatic io.netty.util.HashedWheelTimer.WORKER_STATE_UPDATER:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
aload 0
iconst_2
invokevirtual java.util.concurrent.atomic.AtomicIntegerFieldUpdater.getAndSet:(Ljava/lang/Object;I)I
iconst_2
if_icmpeq 8
7: getstatic io.netty.util.HashedWheelTimer.INSTANCE_COUNTER:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.decrementAndGet:()I
pop
8: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lio/netty/util/HashedWheelTimer;
Exception table:
from to target type
0 2 2 any
Exceptions:
throws java.lang.Throwable
private static io.netty.util.HashedWheelTimer$HashedWheelBucket[] createWheel(int);
descriptor: (I)[Lio/netty/util/HashedWheelTimer$HashedWheelBucket;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=5, locals=3, args_size=1
start local 0 0: iload 0
ifgt 4
1: new java.lang.IllegalArgumentException
dup
2: new java.lang.StringBuilder
dup
ldc "ticksPerWheel must be greater than 0: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 0
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
3: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
4: StackMap locals:
StackMap stack:
iload 0
ldc 1073741824
if_icmple 8
5: new java.lang.IllegalArgumentException
dup
6: new java.lang.StringBuilder
dup
ldc "ticksPerWheel may not be greater than 2^30: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 0
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
7: invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
8: StackMap locals:
StackMap stack:
iload 0
invokestatic io.netty.util.HashedWheelTimer.normalizeTicksPerWheel:(I)I
istore 0
9: iload 0
anewarray io.netty.util.HashedWheelTimer$HashedWheelBucket
astore 1
start local 1 10: iconst_0
istore 2
start local 2 11: goto 14
12: StackMap locals: io.netty.util.HashedWheelTimer$HashedWheelBucket[] int
StackMap stack:
aload 1
iload 2
new io.netty.util.HashedWheelTimer$HashedWheelBucket
dup
invokespecial io.netty.util.HashedWheelTimer$HashedWheelBucket.<init>:()V
aastore
13: iinc 2 1
StackMap locals:
StackMap stack:
14: iload 2
aload 1
arraylength
if_icmplt 12
end local 2 15: aload 1
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 16 0 ticksPerWheel I
10 16 1 wheel [Lio/netty/util/HashedWheelTimer$HashedWheelBucket;
11 15 2 i I
MethodParameters:
Name Flags
ticksPerWheel
private static int normalizeTicksPerWheel(int);
descriptor: (I)I
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=2, locals=2, args_size=1
start local 0 0: iconst_1
istore 1
start local 1 1: goto 3
2: StackMap locals: int
StackMap stack:
iload 1
iconst_1
ishl
istore 1
3: StackMap locals:
StackMap stack:
iload 1
iload 0
if_icmplt 2
4: iload 1
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 ticksPerWheel I
1 5 1 normalizedTicksPerWheel I
MethodParameters:
Name Flags
ticksPerWheel
public void start();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=1, args_size=1
start local 0 0: getstatic io.netty.util.HashedWheelTimer.WORKER_STATE_UPDATER:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
aload 0
invokevirtual java.util.concurrent.atomic.AtomicIntegerFieldUpdater.get:(Ljava/lang/Object;)I
tableswitch { // 0 - 2
0: 1
1: 4
2: 5
default: 6
}
1: StackMap locals:
StackMap stack:
getstatic io.netty.util.HashedWheelTimer.WORKER_STATE_UPDATER:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
aload 0
iconst_0
iconst_1
invokevirtual java.util.concurrent.atomic.AtomicIntegerFieldUpdater.compareAndSet:(Ljava/lang/Object;II)Z
ifeq 10
2: aload 0
getfield io.netty.util.HashedWheelTimer.workerThread:Ljava/lang/Thread;
invokevirtual java.lang.Thread.start:()V
3: goto 10
4: StackMap locals:
StackMap stack:
goto 10
5: StackMap locals:
StackMap stack:
new java.lang.IllegalStateException
dup
ldc "cannot be started once stopped"
invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
athrow
6: StackMap locals:
StackMap stack:
new java.lang.Error
dup
ldc "Invalid WorkerState"
invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
athrow
7: StackMap locals:
StackMap stack:
aload 0
getfield io.netty.util.HashedWheelTimer.startTimeInitialized:Ljava/util/concurrent/CountDownLatch;
invokevirtual java.util.concurrent.CountDownLatch.await:()V
8: goto 10
StackMap locals:
StackMap stack: java.lang.InterruptedException
9: pop
10: StackMap locals:
StackMap stack:
aload 0
getfield io.netty.util.HashedWheelTimer.startTime:J
lconst_0
lcmp
ifeq 7
11: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 12 0 this Lio/netty/util/HashedWheelTimer;
Exception table:
from to target type
7 8 9 Class java.lang.InterruptedException
public java.util.Set<io.netty.util.Timeout> stop();
descriptor: ()Ljava/util/Set;
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=4, args_size=1
start local 0 0: invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
aload 0
getfield io.netty.util.HashedWheelTimer.workerThread:Ljava/lang/Thread;
if_acmpne 7
1: new java.lang.IllegalStateException
dup
2: new java.lang.StringBuilder
dup
ldc Lio/netty/util/HashedWheelTimer;
invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
3: ldc ".stop() cannot be called from "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
4: ldc Lio/netty/util/TimerTask;
invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
5: invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
6: invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
athrow
7: StackMap locals:
StackMap stack:
getstatic io.netty.util.HashedWheelTimer.WORKER_STATE_UPDATER:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
aload 0
iconst_1
iconst_2
invokevirtual java.util.concurrent.atomic.AtomicIntegerFieldUpdater.compareAndSet:(Ljava/lang/Object;II)Z
ifne 14
8: getstatic io.netty.util.HashedWheelTimer.WORKER_STATE_UPDATER:Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater;
aload 0
iconst_2
invokevirtual java.util.concurrent.atomic.AtomicIntegerFieldUpdater.getAndSet:(Ljava/lang/Object;I)I
iconst_2
if_icmpeq 13
9: getstatic io.netty.util.HashedWheelTimer.INSTANCE_COUNTER:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.decrementAndGet:()I
pop
10: aload 0
getfield io.netty.util.HashedWheelTimer.leak:Lio/netty/util/ResourceLeakTracker;
ifnull 13
11: aload 0
getfield io.netty.util.HashedWheelTimer.leak:Lio/netty/util/ResourceLeakTracker;
aload 0
invokeinterface io.netty.util.ResourceLeakTracker.close:(Ljava/lang/Object;)Z
istore 1
start local 1 12: getstatic io.netty.util.HashedWheelTimer.$assertionsDisabled:Z
ifne 13
iload 1
ifne 13
new java.lang.AssertionError
dup
invokespecial java.lang.AssertionError.<init>:()V
athrow
end local 1 13: StackMap locals:
StackMap stack:
invokestatic java.util.Collections.emptySet:()Ljava/util/Set;
areturn
14: StackMap locals:
StackMap stack:
iconst_0
istore 1
start local 1 15: goto 21
16: StackMap locals: int
StackMap stack:
aload 0
getfield io.netty.util.HashedWheelTimer.workerThread:Ljava/lang/Thread;
invokevirtual java.lang.Thread.interrupt:()V
17: aload 0
getfield io.netty.util.HashedWheelTimer.workerThread:Ljava/lang/Thread;
ldc 100
invokevirtual java.lang.Thread.join:(J)V
18: goto 21
StackMap locals:
StackMap stack: java.lang.InterruptedException
19: pop
20: iconst_1
istore 1
21: StackMap locals:
StackMap stack:
aload 0
getfield io.netty.util.HashedWheelTimer.workerThread:Ljava/lang/Thread;
invokevirtual java.lang.Thread.isAlive:()Z
ifne 16
22: iload 1
ifeq 31
23: invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
invokevirtual java.lang.Thread.interrupt:()V
end local 1 24: goto 31
StackMap locals: io.netty.util.HashedWheelTimer
StackMap stack: java.lang.Throwable
25: astore 2
26: getstatic io.netty.util.HashedWheelTimer.INSTANCE_COUNTER:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.decrementAndGet:()I
pop
27: aload 0
getfield io.netty.util.HashedWheelTimer.leak:Lio/netty/util/ResourceLeakTracker;
ifnull 30
28: aload 0
getfield io.netty.util.HashedWheelTimer.leak:Lio/netty/util/ResourceLeakTracker;
aload 0
invokeinterface io.netty.util.ResourceLeakTracker.close:(Ljava/lang/Object;)Z
istore 3
start local 3 29: getstatic io.netty.util.HashedWheelTimer.$assertionsDisabled:Z
ifne 30
iload 3
ifne 30
new java.lang.AssertionError
dup
invokespecial java.lang.AssertionError.<init>:()V
athrow
end local 3 30: StackMap locals: io.netty.util.HashedWheelTimer top java.lang.Throwable
StackMap stack:
aload 2
athrow
31: StackMap locals: io.netty.util.HashedWheelTimer
StackMap stack:
getstatic io.netty.util.HashedWheelTimer.INSTANCE_COUNTER:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.decrementAndGet:()I
pop
32: aload 0
getfield io.netty.util.HashedWheelTimer.leak:Lio/netty/util/ResourceLeakTracker;
ifnull 35
33: aload 0
getfield io.netty.util.HashedWheelTimer.leak:Lio/netty/util/ResourceLeakTracker;
aload 0
invokeinterface io.netty.util.ResourceLeakTracker.close:(Ljava/lang/Object;)Z
istore 3
start local 3 34: getstatic io.netty.util.HashedWheelTimer.$assertionsDisabled:Z
ifne 35
iload 3
ifne 35
new java.lang.AssertionError
dup
invokespecial java.lang.AssertionError.<init>:()V
athrow
end local 3 35: StackMap locals:
StackMap stack:
aload 0
getfield io.netty.util.HashedWheelTimer.worker:Lio/netty/util/HashedWheelTimer$Worker;
invokevirtual io.netty.util.HashedWheelTimer$Worker.unprocessedTimeouts:()Ljava/util/Set;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 36 0 this Lio/netty/util/HashedWheelTimer;
12 13 1 closed Z
15 24 1 interrupted Z
29 30 3 closed Z
34 35 3 closed Z
Exception table:
from to target type
17 18 19 Class java.lang.InterruptedException
14 25 25 any
Signature: ()Ljava/util/Set<Lio/netty/util/Timeout;>;
public io.netty.util.Timeout newTimeout(io.netty.util.TimerTask, long, java.util.concurrent.TimeUnit);
descriptor: (Lio/netty/util/TimerTask;JLjava/util/concurrent/TimeUnit;)Lio/netty/util/Timeout;
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=10, args_size=4
start local 0 start local 1 start local 2 start local 4 0: aload 1
ifnonnull 2
1: new java.lang.NullPointerException
dup
ldc "task"
invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 4
ifnonnull 4
3: new java.lang.NullPointerException
dup
ldc "unit"
invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
athrow
4: StackMap locals:
StackMap stack:
aload 0
getfield io.netty.util.HashedWheelTimer.pendingTimeouts:Ljava/util/concurrent/atomic/AtomicLong;
invokevirtual java.util.concurrent.atomic.AtomicLong.incrementAndGet:()J
lstore 5
start local 5 5: aload 0
getfield io.netty.util.HashedWheelTimer.maxPendingTimeouts:J
lconst_0
lcmp
ifle 11
lload 5
aload 0
getfield io.netty.util.HashedWheelTimer.maxPendingTimeouts:J
lcmp
ifle 11
6: aload 0
getfield io.netty.util.HashedWheelTimer.pendingTimeouts:Ljava/util/concurrent/atomic/AtomicLong;
invokevirtual java.util.concurrent.atomic.AtomicLong.decrementAndGet:()J
pop2
7: new java.util.concurrent.RejectedExecutionException
dup
new java.lang.StringBuilder
dup
ldc "Number of pending timeouts ("
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
8: lload 5
invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
ldc ") is greater than or equal to maximum allowed pending "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
9: ldc "timeouts ("
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 0
getfield io.netty.util.HashedWheelTimer.maxPendingTimeouts:J
invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
ldc ")"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
10: invokespecial java.util.concurrent.RejectedExecutionException.<init>:(Ljava/lang/String;)V
athrow
11: StackMap locals: long
StackMap stack:
aload 0
invokevirtual io.netty.util.HashedWheelTimer.start:()V
12: invokestatic java.lang.System.nanoTime:()J
aload 4
lload 2
invokevirtual java.util.concurrent.TimeUnit.toNanos:(J)J
ladd
aload 0
getfield io.netty.util.HashedWheelTimer.startTime:J
lsub
lstore 7
start local 7 13: lload 2
lconst_0
lcmp
ifle 15
lload 7
lconst_0
lcmp
ifge 15
14: ldc 9223372036854775807
lstore 7
15: StackMap locals: long
StackMap stack:
new io.netty.util.HashedWheelTimer$HashedWheelTimeout
dup
aload 0
aload 1
lload 7
invokespecial io.netty.util.HashedWheelTimer$HashedWheelTimeout.<init>:(Lio/netty/util/HashedWheelTimer;Lio/netty/util/TimerTask;J)V
astore 9
start local 9 16: aload 0
getfield io.netty.util.HashedWheelTimer.timeouts:Ljava/util/Queue;
aload 9
invokeinterface java.util.Queue.add:(Ljava/lang/Object;)Z
pop
17: aload 9
areturn
end local 9 end local 7 end local 5 end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 18 0 this Lio/netty/util/HashedWheelTimer;
0 18 1 task Lio/netty/util/TimerTask;
0 18 2 delay J
0 18 4 unit Ljava/util/concurrent/TimeUnit;
5 18 5 pendingTimeoutsCount J
13 18 7 deadline J
16 18 9 timeout Lio/netty/util/HashedWheelTimer$HashedWheelTimeout;
MethodParameters:
Name Flags
task
delay
unit
public long pendingTimeouts();
descriptor: ()J
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
getfield io.netty.util.HashedWheelTimer.pendingTimeouts:Ljava/util/concurrent/atomic/AtomicLong;
invokevirtual java.util.concurrent.atomic.AtomicLong.get:()J
lreturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lio/netty/util/HashedWheelTimer;
private static void reportTooManyInstances();
descriptor: ()V
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=4, locals=1, args_size=0
0: ldc Lio/netty/util/HashedWheelTimer;
invokestatic io.netty.util.internal.StringUtil.simpleClassName:(Ljava/lang/Class;)Ljava/lang/String;
astore 0
start local 0 1: getstatic io.netty.util.HashedWheelTimer.logger:Lio/netty/util/internal/logging/InternalLogger;
new java.lang.StringBuilder
dup
ldc "You are creating too many "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 0
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
ldc " instances. "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
2: aload 0
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
ldc " is a shared resource that must be reused across the JVM,"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
3: ldc "so that only a few instances are created."
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
4: invokeinterface io.netty.util.internal.logging.InternalLogger.error:(Ljava/lang/String;)V
5: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
1 6 0 resourceType Ljava/lang/String;
}
SourceFile: "HashedWheelTimer.java"
NestMembers:
io.netty.util.HashedWheelTimer$HashedWheelBucket io.netty.util.HashedWheelTimer$HashedWheelTimeout io.netty.util.HashedWheelTimer$Worker
InnerClasses:
private final HashedWheelBucket = io.netty.util.HashedWheelTimer$HashedWheelBucket of io.netty.util.HashedWheelTimer
private final HashedWheelTimeout = io.netty.util.HashedWheelTimer$HashedWheelTimeout of io.netty.util.HashedWheelTimer
private final Worker = io.netty.util.HashedWheelTimer$Worker of io.netty.util.HashedWheelTimer