public final class com.lmax.disruptor.MultiProducerSequencer extends com.lmax.disruptor.AbstractSequencer
minor version: 0
major version: 59
flags: flags: (0x0031) ACC_PUBLIC, ACC_FINAL, ACC_SUPER
this_class: com.lmax.disruptor.MultiProducerSequencer
super_class: com.lmax.disruptor.AbstractSequencer
{
private static final sun.misc.Unsafe UNSAFE;
descriptor: Lsun/misc/Unsafe;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long BASE;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private static final long SCALE;
descriptor: J
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
private final com.lmax.disruptor.Sequence gatingSequenceCache;
descriptor: Lcom/lmax/disruptor/Sequence;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final int[] availableBuffer;
descriptor: [I
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final int indexMask;
descriptor: I
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final int indexShift;
descriptor: I
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: invokestatic com.lmax.disruptor.util.Util.getUnsafe:()Lsun/misc/Unsafe;
putstatic com.lmax.disruptor.MultiProducerSequencer.UNSAFE:Lsun/misc/Unsafe;
1: getstatic com.lmax.disruptor.MultiProducerSequencer.UNSAFE:Lsun/misc/Unsafe;
ldc [I
invokevirtual sun.misc.Unsafe.arrayBaseOffset:(Ljava/lang/Class;)I
i2l
putstatic com.lmax.disruptor.MultiProducerSequencer.BASE:J
2: getstatic com.lmax.disruptor.MultiProducerSequencer.UNSAFE:Lsun/misc/Unsafe;
ldc [I
invokevirtual sun.misc.Unsafe.arrayIndexScale:(Ljava/lang/Class;)I
i2l
putstatic com.lmax.disruptor.MultiProducerSequencer.SCALE:J
return
LocalVariableTable:
Start End Slot Name Signature
public void <init>(int, com.lmax.disruptor.WaitStrategy);
descriptor: (ILcom/lmax/disruptor/WaitStrategy;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
iload 1
aload 2
invokespecial com.lmax.disruptor.AbstractSequencer.<init>:(ILcom/lmax/disruptor/WaitStrategy;)V
1: aload 0
new com.lmax.disruptor.Sequence
dup
ldc -1
invokespecial com.lmax.disruptor.Sequence.<init>:(J)V
putfield com.lmax.disruptor.MultiProducerSequencer.gatingSequenceCache:Lcom/lmax/disruptor/Sequence;
2: aload 0
iload 1
newarray 10
putfield com.lmax.disruptor.MultiProducerSequencer.availableBuffer:[I
3: aload 0
iload 1
iconst_1
isub
putfield com.lmax.disruptor.MultiProducerSequencer.indexMask:I
4: aload 0
iload 1
invokestatic com.lmax.disruptor.util.Util.log2:(I)I
putfield com.lmax.disruptor.MultiProducerSequencer.indexShift:I
5: aload 0
invokevirtual com.lmax.disruptor.MultiProducerSequencer.initialiseAvailableBuffer:()V
6: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 7 1 bufferSize I
0 7 2 waitStrategy Lcom/lmax/disruptor/WaitStrategy;
MethodParameters:
Name Flags
bufferSize
waitStrategy final
public boolean hasAvailableCapacity(int);
descriptor: (I)Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=2, args_size=2
start local 0 start local 1 0: aload 0
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.gatingSequences:[Lcom/lmax/disruptor/Sequence;
iload 1
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.cursor:Lcom/lmax/disruptor/Sequence;
invokevirtual com.lmax.disruptor.Sequence.get:()J
invokevirtual com.lmax.disruptor.MultiProducerSequencer.hasAvailableCapacity:([Lcom/lmax/disruptor/Sequence;IJ)Z
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 1 1 requiredCapacity I
MethodParameters:
Name Flags
requiredCapacity final
private boolean hasAvailableCapacity(com.lmax.disruptor.Sequence[], int, long);
descriptor: ([Lcom/lmax/disruptor/Sequence;IJ)Z
flags: (0x0002) ACC_PRIVATE
Code:
stack=4, locals=11, args_size=4
start local 0 start local 1 start local 2 start local 3 0: lload 3
iload 2
i2l
ladd
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.bufferSize:I
i2l
lsub
lstore 5
start local 5 1: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.gatingSequenceCache:Lcom/lmax/disruptor/Sequence;
invokevirtual com.lmax.disruptor.Sequence.get:()J
lstore 7
start local 7 2: lload 5
lload 7
lcmp
ifgt 3
lload 7
lload 3
lcmp
ifle 7
3: StackMap locals: long long
StackMap stack:
aload 1
lload 3
invokestatic com.lmax.disruptor.util.Util.getMinimumSequence:([Lcom/lmax/disruptor/Sequence;J)J
lstore 9
start local 9 4: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.gatingSequenceCache:Lcom/lmax/disruptor/Sequence;
lload 9
invokevirtual com.lmax.disruptor.Sequence.set:(J)V
5: lload 5
lload 9
lcmp
ifle 7
6: iconst_0
ireturn
end local 9 7: StackMap locals:
StackMap stack:
iconst_1
ireturn
end local 7 end local 5 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 8 1 gatingSequences [Lcom/lmax/disruptor/Sequence;
0 8 2 requiredCapacity I
0 8 3 cursorValue J
1 8 5 wrapPoint J
2 8 7 cachedGatingSequence J
4 7 9 minSequence J
MethodParameters:
Name Flags
gatingSequences
requiredCapacity final
cursorValue
public void claim(long);
descriptor: (J)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=3, args_size=2
start local 0 start local 1 0: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.cursor:Lcom/lmax/disruptor/Sequence;
lload 1
invokevirtual com.lmax.disruptor.Sequence.set:(J)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 2 1 sequence J
MethodParameters:
Name Flags
sequence
public long next();
descriptor: ()J
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
iconst_1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.next:(I)J
lreturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
public long next(int);
descriptor: (I)J
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=12, args_size=2
start local 0 start local 1 0: iload 1
iconst_1
if_icmpge 2
1: new java.lang.IllegalArgumentException
dup
ldc "n must be > 0"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.cursor:Lcom/lmax/disruptor/Sequence;
invokevirtual com.lmax.disruptor.Sequence.get:()J
lstore 2
start local 2 3: lload 2
iload 1
i2l
ladd
lstore 4
start local 4 4: lload 4
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.bufferSize:I
i2l
lsub
lstore 6
start local 6 5: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.gatingSequenceCache:Lcom/lmax/disruptor/Sequence;
invokevirtual com.lmax.disruptor.Sequence.get:()J
lstore 8
start local 8 6: lload 6
lload 8
lcmp
ifgt 7
lload 8
lload 2
lcmp
ifle 13
7: StackMap locals: com.lmax.disruptor.MultiProducerSequencer int long long long long
StackMap stack:
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.gatingSequences:[Lcom/lmax/disruptor/Sequence;
lload 2
invokestatic com.lmax.disruptor.util.Util.getMinimumSequence:([Lcom/lmax/disruptor/Sequence;J)J
lstore 10
start local 10 8: lload 6
lload 10
lcmp
ifle 11
9: lconst_1
invokestatic java.util.concurrent.locks.LockSupport.parkNanos:(J)V
10: goto 2
11: StackMap locals: long
StackMap stack:
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.gatingSequenceCache:Lcom/lmax/disruptor/Sequence;
lload 10
invokevirtual com.lmax.disruptor.Sequence.set:(J)V
end local 10 12: goto 2
13: StackMap locals:
StackMap stack:
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.cursor:Lcom/lmax/disruptor/Sequence;
lload 2
lload 4
invokevirtual com.lmax.disruptor.Sequence.compareAndSet:(JJ)Z
ifeq 2
end local 8 end local 6 14: lload 4
lreturn
end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 15 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 15 1 n I
3 15 2 current J
4 15 4 next J
5 14 6 wrapPoint J
6 14 8 cachedGatingSequence J
8 12 10 gatingSequence J
MethodParameters:
Name Flags
n
public long tryNext();
descriptor: ()J
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
iconst_1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.tryNext:(I)J
lreturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
Exceptions:
throws com.lmax.disruptor.InsufficientCapacityException
public long tryNext(int);
descriptor: (I)J
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=6, args_size=2
start local 0 start local 1 0: iload 1
iconst_1
if_icmpge 2
1: new java.lang.IllegalArgumentException
dup
ldc "n must be > 0"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
2: StackMap locals:
StackMap stack:
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.cursor:Lcom/lmax/disruptor/Sequence;
invokevirtual com.lmax.disruptor.Sequence.get:()J
lstore 2
start local 2 3: lload 2
iload 1
i2l
ladd
lstore 4
start local 4 4: aload 0
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.gatingSequences:[Lcom/lmax/disruptor/Sequence;
iload 1
lload 2
invokevirtual com.lmax.disruptor.MultiProducerSequencer.hasAvailableCapacity:([Lcom/lmax/disruptor/Sequence;IJ)Z
ifne 6
5: getstatic com.lmax.disruptor.InsufficientCapacityException.INSTANCE:Lcom/lmax/disruptor/InsufficientCapacityException;
athrow
6: StackMap locals: long long
StackMap stack:
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.cursor:Lcom/lmax/disruptor/Sequence;
lload 2
lload 4
invokevirtual com.lmax.disruptor.Sequence.compareAndSet:(JJ)Z
ifeq 2
7: lload 4
lreturn
end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 8 1 n I
3 8 2 current J
4 8 4 next J
Exceptions:
throws com.lmax.disruptor.InsufficientCapacityException
MethodParameters:
Name Flags
n
public long remainingCapacity();
descriptor: ()J
flags: (0x0001) ACC_PUBLIC
Code:
stack=6, locals=5, args_size=1
start local 0 0: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.gatingSequences:[Lcom/lmax/disruptor/Sequence;
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.cursor:Lcom/lmax/disruptor/Sequence;
invokevirtual com.lmax.disruptor.Sequence.get:()J
invokestatic com.lmax.disruptor.util.Util.getMinimumSequence:([Lcom/lmax/disruptor/Sequence;J)J
lstore 1
start local 1 1: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.cursor:Lcom/lmax/disruptor/Sequence;
invokevirtual com.lmax.disruptor.Sequence.get:()J
lstore 3
start local 3 2: aload 0
invokevirtual com.lmax.disruptor.MultiProducerSequencer.getBufferSize:()I
i2l
lload 3
lload 1
lsub
lsub
lreturn
end local 3 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
1 3 1 consumed J
2 3 3 produced J
private void initialiseAvailableBuffer();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=2, args_size=1
start local 0 0: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.availableBuffer:[I
arraylength
iconst_1
isub
istore 1
start local 1 1: goto 4
2: StackMap locals: int
StackMap stack:
aload 0
iload 1
iconst_m1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.setAvailableBufferValue:(II)V
3: iinc 1 -1
StackMap locals:
StackMap stack:
4: iload 1
ifne 2
end local 1 5: aload 0
iconst_0
iconst_m1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.setAvailableBufferValue:(II)V
6: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
1 5 1 i I
public void publish(long);
descriptor: (J)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=3, args_size=2
start local 0 start local 1 0: aload 0
lload 1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.setAvailable:(J)V
1: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.waitStrategy:Lcom/lmax/disruptor/WaitStrategy;
invokeinterface com.lmax.disruptor.WaitStrategy.signalAllWhenBlocking:()V
2: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 3 1 sequence J
MethodParameters:
Name Flags
sequence final
public void publish(long, long);
descriptor: (JJ)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=7, args_size=3
start local 0 start local 1 start local 3 0: lload 1
lstore 5
start local 5 1: goto 4
2: StackMap locals: long
StackMap stack:
aload 0
lload 5
invokevirtual com.lmax.disruptor.MultiProducerSequencer.setAvailable:(J)V
3: lload 5
lconst_1
ladd
lstore 5
StackMap locals:
StackMap stack:
4: lload 5
lload 3
lcmp
ifle 2
end local 5 5: aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.waitStrategy:Lcom/lmax/disruptor/WaitStrategy;
invokeinterface com.lmax.disruptor.WaitStrategy.signalAllWhenBlocking:()V
6: return
end local 3 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 7 1 lo J
0 7 3 hi J
1 5 5 l J
MethodParameters:
Name Flags
lo
hi
private void setAvailable(long);
descriptor: (J)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=3, args_size=2
start local 0 start local 1 0: aload 0
aload 0
lload 1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.calculateIndex:(J)I
aload 0
lload 1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.calculateAvailabilityFlag:(J)I
invokevirtual com.lmax.disruptor.MultiProducerSequencer.setAvailableBufferValue:(II)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 2 1 sequence J
MethodParameters:
Name Flags
sequence final
private void setAvailableBufferValue(int, int);
descriptor: (II)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=5, args_size=3
start local 0 start local 1 start local 2 0: iload 1
i2l
getstatic com.lmax.disruptor.MultiProducerSequencer.SCALE:J
lmul
getstatic com.lmax.disruptor.MultiProducerSequencer.BASE:J
ladd
lstore 3
start local 3 1: getstatic com.lmax.disruptor.MultiProducerSequencer.UNSAFE:Lsun/misc/Unsafe;
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.availableBuffer:[I
lload 3
iload 2
invokevirtual sun.misc.Unsafe.putOrderedInt:(Ljava/lang/Object;JI)V
2: return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 3 1 index I
0 3 2 flag I
1 3 3 bufferAddress J
MethodParameters:
Name Flags
index
flag
public boolean isAvailable(long);
descriptor: (J)Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=7, args_size=2
start local 0 start local 1 0: aload 0
lload 1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.calculateIndex:(J)I
istore 3
start local 3 1: aload 0
lload 1
invokevirtual com.lmax.disruptor.MultiProducerSequencer.calculateAvailabilityFlag:(J)I
istore 4
start local 4 2: iload 3
i2l
getstatic com.lmax.disruptor.MultiProducerSequencer.SCALE:J
lmul
getstatic com.lmax.disruptor.MultiProducerSequencer.BASE:J
ladd
lstore 5
start local 5 3: getstatic com.lmax.disruptor.MultiProducerSequencer.UNSAFE:Lsun/misc/Unsafe;
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.availableBuffer:[I
lload 5
invokevirtual sun.misc.Unsafe.getIntVolatile:(Ljava/lang/Object;J)I
iload 4
if_icmpne 4
iconst_1
ireturn
StackMap locals: int int long
StackMap stack:
4: iconst_0
ireturn
end local 5 end local 4 end local 3 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 5 1 sequence J
1 5 3 index I
2 5 4 flag I
3 5 5 bufferAddress J
MethodParameters:
Name Flags
sequence
public long getHighestPublishedSequence(long, long);
descriptor: (JJ)J
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=7, args_size=3
start local 0 start local 1 start local 3 0: lload 1
lstore 5
start local 5 1: goto 5
2: StackMap locals: long
StackMap stack:
aload 0
lload 5
invokevirtual com.lmax.disruptor.MultiProducerSequencer.isAvailable:(J)Z
ifne 4
3: lload 5
lconst_1
lsub
lreturn
4: StackMap locals:
StackMap stack:
lload 5
lconst_1
ladd
lstore 5
StackMap locals:
StackMap stack:
5: lload 5
lload 3
lcmp
ifle 2
end local 5 6: lload 3
lreturn
end local 3 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 7 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 7 1 lowerBound J
0 7 3 availableSequence J
1 6 5 sequence J
MethodParameters:
Name Flags
lowerBound
availableSequence
private int calculateAvailabilityFlag(long);
descriptor: (J)I
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=3, args_size=2
start local 0 start local 1 0: lload 1
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.indexShift:I
lushr
l2i
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 1 1 sequence J
MethodParameters:
Name Flags
sequence final
private int calculateIndex(long);
descriptor: (J)I
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=3, args_size=2
start local 0 start local 1 0: lload 1
l2i
aload 0
getfield com.lmax.disruptor.MultiProducerSequencer.indexMask:I
iand
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lcom/lmax/disruptor/MultiProducerSequencer;
0 1 1 sequence J
MethodParameters:
Name Flags
sequence final
}
SourceFile: "MultiProducerSequencer.java"