diff --git a/leaf-server/src/main/java/org/dreeam/leaf/util/queue/MpmcQueue.java b/leaf-server/src/main/java/org/dreeam/leaf/util/queue/MpmcQueue.java index 8f184d0c..5ad71287 100644 --- a/leaf-server/src/main/java/org/dreeam/leaf/util/queue/MpmcQueue.java +++ b/leaf-server/src/main/java/org/dreeam/leaf/util/queue/MpmcQueue.java @@ -29,14 +29,14 @@ public final class MpmcQueue { @Nullable private final T[] buffer; - private final PaddedReads reads = new PaddedReads(); - private final PaddedWrites writes = new PaddedWrites(); + private final ReadCounter reads = new ReadCounter(); + private final WriteCounter writes = new WriteCounter(); static { try { MethodHandles.Lookup l = MethodHandles.lookup(); - READ = l.findVarHandle(PaddedReads.class, "reads", long.class); - WRITE = l.findVarHandle(PaddedWrites.class, "writes", long.class); + READ = l.findVarHandle(ReadCounter.class, "reads", long.class); + WRITE = l.findVarHandle(WriteCounter.class, "writes", long.class); } catch (ReflectiveOperationException e) { throw new ExceptionInInitializerError(e); } @@ -190,29 +190,24 @@ public final class MpmcQueue { } @SuppressWarnings("unused") - private final static class PaddedReads { - private byte i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15; - private byte j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15; - private byte k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15; - private byte l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15; - private byte m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15; - private byte n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15; - private byte o0, o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15; - private byte p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15; + public abstract static sealed class CachePadded permits ReadCounter, WriteCounter { + public final byte i0 = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, i13 = 0, i14 = 0, i15 = 0; + public final byte j0 = 0, j1 = 0, j2 = 0, j3 = 0, j4 = 0, j5 = 0, j6 = 0, j7 = 0, j8 = 0, j9 = 0, j10 = 0, j11 = 0, j12 = 0, j13 = 0, j14 = 0, j15 = 0; + public final byte k0 = 0, k1 = 0, k2 = 0, k3 = 0, k4 = 0, k5 = 0, k6 = 0, k7 = 0, k8 = 0, k9 = 0, k10 = 0, k11 = 0, k12 = 0, k13 = 0, k14 = 0, k15 = 0; + public final byte l0 = 0, l1 = 0, l2 = 0, l3 = 0, l4 = 0, l5 = 0, l6 = 0, l7 = 0, l8 = 0, l9 = 0, l10 = 0, l11 = 0, l12 = 0, l13 = 0, l14 = 0, l15 = 0; + public final byte m0 = 0, m1 = 0, m2 = 0, m3 = 0, m4 = 0, m5 = 0, m6 = 0, m7 = 0, m8 = 0, m9 = 0, m10 = 0, m11 = 0, m12 = 0, m13 = 0, m14 = 0, m15 = 0; + public final byte n0 = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0, n8 = 0, n9 = 0, n10 = 0, n11 = 0, n12 = 0, n13 = 0, n14 = 0, n15 = 0; + public final byte o0 = 0, o1 = 0, o2 = 0, o3 = 0, o4 = 0, o5 = 0, o6 = 0, o7 = 0, o8 = 0, o9 = 0, o10 = 0, o11 = 0, o12 = 0, o13 = 0, o14 = 0, o15 = 0; + public final byte p0 = 0, p1 = 0, p2 = 0, p3 = 0, p4 = 0, p5 = 0, p6 = 0, p7 = 0, p8 = 0, p9 = 0, p10 = 0, p11 = 0, p12 = 0, p13 = 0, p14 = 0, p15 = 0; + } + private static final class ReadCounter extends CachePadded { + @SuppressWarnings("unused") private volatile long reads; } - @SuppressWarnings("unused") - private final static class PaddedWrites { - private byte i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15; - private byte j0, j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12, j13, j14, j15; - private byte k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, k12, k13, k14, k15; - private byte l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15; - private byte m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15; - private byte n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15; - private byte o0, o1, o2, o3, o4, o5, o6, o7, o8, o9, o10, o11, o12, o13, o14, o15; - private byte p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15; + private static final class WriteCounter extends CachePadded { + @SuppressWarnings("unused") private volatile long writes; } }