public class io.ebeaninternal.server.idgen.UuidV1RndIdGenerator implements io.ebean.config.dbplatform.PlatformIdGenerator
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: io.ebeaninternal.server.idgen.UuidV1RndIdGenerator
super_class: java.lang.Object
{
protected static final org.slf4j.Logger logger;
descriptor: Lorg/slf4j/Logger;
flags: (0x001c) ACC_PROTECTED, ACC_STATIC, ACC_FINAL
protected static final long UUID_EPOCH_OFFSET;
descriptor: J
flags: (0x001c) ACC_PROTECTED, ACC_STATIC, ACC_FINAL
ConstantValue: 122192928000000000
protected static final long MILLIS_TO_UUID;
descriptor: J
flags: (0x001c) ACC_PROTECTED, ACC_STATIC, ACC_FINAL
ConstantValue: 10000
public static final io.ebeaninternal.server.idgen.UuidV1RndIdGenerator INSTANCE;
descriptor: Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
protected final java.util.concurrent.atomic.AtomicInteger clockSeq;
descriptor: Ljava/util/concurrent/atomic/AtomicInteger;
flags: (0x0014) ACC_PROTECTED, ACC_FINAL
private final java.security.SecureRandom numberGenerator;
descriptor: Ljava/security/SecureRandom;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
protected java.util.concurrent.atomic.AtomicLong timeStamp;
descriptor: Ljava/util/concurrent/atomic/AtomicLong;
flags: (0x0004) ACC_PROTECTED
private java.util.concurrent.atomic.AtomicLong nanoToMilliOffset;
descriptor: Ljava/util/concurrent/atomic/AtomicLong;
flags: (0x0002) ACC_PRIVATE
private final java.util.concurrent.locks.ReentrantLock lock;
descriptor: Ljava/util/concurrent/locks/ReentrantLock;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: ldc "io.ebean.IDGEN"
invokestatic org.slf4j.LoggerFactory.getLogger:(Ljava/lang/String;)Lorg/slf4j/Logger;
putstatic io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.logger:Lorg/slf4j/Logger;
1: new io.ebeaninternal.server.idgen.UuidV1RndIdGenerator
dup
invokespecial io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.<init>:()V
putstatic io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.INSTANCE:Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
return
LocalVariableTable:
Start End Slot Name Signature
private static long currentUuidTime();
descriptor: ()J
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=4, locals=0, args_size=0
0: invokestatic java.lang.System.currentTimeMillis:()J
ldc 10000
lmul
ldc 122192928000000000
ladd
lreturn
LocalVariableTable:
Start End Slot Name Signature
public void <init>();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new java.util.concurrent.atomic.AtomicInteger
dup
invokestatic java.lang.Math.random:()D
ldc 16383.0
dmul
d2i
invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:(I)V
putfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.clockSeq:Ljava/util/concurrent/atomic/AtomicInteger;
2: aload 0
new java.security.SecureRandom
dup
invokespecial java.security.SecureRandom.<init>:()V
putfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.numberGenerator:Ljava/security/SecureRandom;
3: aload 0
new java.util.concurrent.atomic.AtomicLong
dup
invokestatic io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.currentUuidTime:()J
invokespecial java.util.concurrent.atomic.AtomicLong.<init>:(J)V
putfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.timeStamp:Ljava/util/concurrent/atomic/AtomicLong;
4: aload 0
new java.util.concurrent.atomic.AtomicLong
dup
invokestatic io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.currentUuidTime:()J
invokespecial java.util.concurrent.atomic.AtomicLong.<init>:(J)V
putfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.nanoToMilliOffset:Ljava/util/concurrent/atomic/AtomicLong;
5: aload 0
new java.util.concurrent.locks.ReentrantLock
dup
invokespecial java.util.concurrent.locks.ReentrantLock.<init>:()V
putfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.lock:Ljava/util/concurrent/locks/ReentrantLock;
6: aload 0
invokevirtual io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.computeNanoOffset:()V
7: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
protected void computeNanoOffset();
descriptor: ()V
flags: (0x0004) ACC_PROTECTED
Code:
stack=4, locals=7, args_size=1
start local 0 0: invokestatic io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.currentUuidTime:()J
lstore 1
start local 1 1: invokestatic java.lang.System.nanoTime:()J
ldc 100
ldiv
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.nanoToMilliOffset:Ljava/util/concurrent/atomic/AtomicLong;
invokevirtual java.util.concurrent.atomic.AtomicLong.get:()J
ladd
lstore 3
start local 3 2: lload 1
lload 3
lsub
lstore 5
start local 5 3: lload 5
invokestatic java.lang.Math.abs:(J)J
ldc 10000000
lcmp
ifle 5
4: aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.nanoToMilliOffset:Ljava/util/concurrent/atomic/AtomicLong;
lload 5
invokevirtual java.util.concurrent.atomic.AtomicLong.addAndGet:(J)J
pop2
5: StackMap locals: long long long
StackMap stack:
return
end local 5 end local 3 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
1 6 1 currentTime J
2 6 3 fromNanos J
3 6 5 offset J
protected void saveState();
descriptor: ()V
flags: (0x0004) ACC_PROTECTED
Code:
stack=0, locals=1, args_size=1
start local 0 0: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
protected byte[] getNodeIdBytes();
descriptor: ()[B
flags: (0x0004) ACC_PROTECTED
Code:
stack=4, locals=2, args_size=1
start local 0 0: bipush 6
newarray 8
astore 1
start local 1 1: aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.numberGenerator:Ljava/security/SecureRandom;
aload 1
invokevirtual java.security.SecureRandom.nextBytes:([B)V
2: aload 1
iconst_0
dup2
baload
iconst_1
ior
i2b
bastore
3: aload 1
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
1 4 1 idBytes [B
public java.util.UUID nextId(io.ebean.Transaction);
descriptor: (Lio/ebean/Transaction;)Ljava/util/UUID;
flags: (0x0001) ACC_PUBLIC
Code:
stack=8, locals=13, args_size=2
start local 0 start local 1 0: invokestatic java.lang.System.nanoTime:()J
ldc 100
ldiv
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.nanoToMilliOffset:Ljava/util/concurrent/atomic/AtomicLong;
invokevirtual java.util.concurrent.atomic.AtomicLong.get:()J
ladd
lstore 2
start local 2 1: StackMap locals: long
StackMap stack:
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.clockSeq:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
istore 6
start local 6 2: StackMap locals: io.ebeaninternal.server.idgen.UuidV1RndIdGenerator io.ebean.Transaction long top top int
StackMap stack:
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.timeStamp:Ljava/util/concurrent/atomic/AtomicLong;
invokevirtual java.util.concurrent.atomic.AtomicLong.get:()J
lstore 7
start local 7 3: lload 2
lload 7
lsub
lstore 4
start local 4 4: lload 4
ldc -200000000
lcmp
ifge 18
5: getstatic io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.logger:Lorg/slf4j/Logger;
ldc "Clock skew of {} ms detected"
lload 4
ldc -10000
ldiv
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
invokeinterface org.slf4j.Logger.info:(Ljava/lang/String;Ljava/lang/Object;)V
6: aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.lock:Ljava/util/concurrent/locks/ReentrantLock;
invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
7: aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.clockSeq:Ljava/util/concurrent/atomic/AtomicInteger;
iload 6
iload 6
iconst_1
iadd
invokevirtual java.util.concurrent.atomic.AtomicInteger.compareAndSet:(II)Z
ifeq 12
8: aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.timeStamp:Ljava/util/concurrent/atomic/AtomicLong;
lload 2
invokevirtual java.util.concurrent.atomic.AtomicLong.set:(J)V
9: aload 0
invokevirtual io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.saveState:()V
10: aload 0
invokevirtual io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.computeNanoOffset:()V
11: goto 17
12: StackMap locals: io.ebeaninternal.server.idgen.UuidV1RndIdGenerator io.ebean.Transaction long long int long
StackMap stack:
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.lock:Ljava/util/concurrent/locks/ReentrantLock;
invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
13: goto 2
14: StackMap locals:
StackMap stack: java.lang.Throwable
astore 9
15: aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.lock:Ljava/util/concurrent/locks/ReentrantLock;
invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
16: aload 9
athrow
17: StackMap locals:
StackMap stack:
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.lock:Ljava/util/concurrent/locks/ReentrantLock;
invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
18: StackMap locals:
StackMap stack:
lload 4
lconst_0
lcmp
ifle 20
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.timeStamp:Ljava/util/concurrent/atomic/AtomicLong;
lload 7
lload 2
invokevirtual java.util.concurrent.atomic.AtomicLong.compareAndSet:(JJ)Z
ifeq 20
19: goto 22
20: StackMap locals:
StackMap stack:
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.timeStamp:Ljava/util/concurrent/atomic/AtomicLong;
lload 7
lload 7
lconst_1
ladd
invokevirtual java.util.concurrent.atomic.AtomicLong.compareAndSet:(JJ)Z
ifeq 2
21: lload 7
lconst_1
ladd
lstore 2
end local 7 22: StackMap locals:
StackMap stack:
iload 6
aload 0
getfield io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.clockSeq:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
if_icmpne 1
23: lload 4
ldc 600000000
lcmp
ifle 26
24: aload 0
invokevirtual io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.saveState:()V
25: aload 0
invokevirtual io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.computeNanoOffset:()V
26: StackMap locals:
StackMap stack:
lload 2
bipush 32
lshl
lstore 7
start local 7 27: lload 7
lload 2
ldc 281470681743360
land
bipush 16
lshr
lor
lstore 7
28: lload 7
ldc 4096
lload 2
bipush 48
lshr
ldc 4095
land
lor
lor
lstore 7
29: aload 0
invokevirtual io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.getNodeIdBytes:()[B
astore 9
start local 9 30: lconst_0
lstore 10
start local 10 31: iconst_0
istore 12
start local 12 32: goto 35
33: StackMap locals: io.ebeaninternal.server.idgen.UuidV1RndIdGenerator io.ebean.Transaction long long int long byte[] long int
StackMap stack:
lload 10
bipush 8
lshl
aload 9
iload 12
baload
sipush 255
iand
i2l
lor
lstore 10
34: iinc 12 1
StackMap locals:
StackMap stack:
35: iload 12
bipush 6
if_icmplt 33
end local 12 36: iload 6
sipush 16383
iand
ldc 32768
ior
istore 6
37: lload 10
iload 6
i2l
bipush 48
lshl
lor
lstore 10
38: new java.util.UUID
dup
lload 7
lload 10
invokespecial java.util.UUID.<init>:(JJ)V
areturn
end local 10 end local 9 end local 7 end local 6 end local 4 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 39 0 this Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
0 39 1 t Lio/ebean/Transaction;
1 39 2 current J
4 39 4 delta J
2 39 6 seq I
3 22 7 last J
27 39 7 msb J
30 39 9 idBytes [B
31 39 10 lsb J
32 36 12 i I
Exception table:
from to target type
7 12 14 any
MethodParameters:
Name Flags
t
public java.lang.String getName();
descriptor: ()Ljava/lang/String;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: ldc "uuid"
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
public boolean isDbSequence();
descriptor: ()Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: iconst_0
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
public void preAllocateIds(int);
descriptor: (I)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=0, locals=2, args_size=2
start local 0 start local 1 0: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lio/ebeaninternal/server/idgen/UuidV1RndIdGenerator;
0 1 1 allocateSize I
MethodParameters:
Name Flags
allocateSize
public java.lang.Object nextId(io.ebean.Transaction);
descriptor: (Lio/ebean/Transaction;)Ljava/lang/Object;
flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
Code:
stack=2, locals=2, args_size=2
0: aload 0
aload 1
invokevirtual io.ebeaninternal.server.idgen.UuidV1RndIdGenerator.nextId:(Lio/ebean/Transaction;)Ljava/util/UUID;
areturn
LocalVariableTable:
Start End Slot Name Signature
}
SourceFile: "UuidV1RndIdGenerator.java"