mirror of
https://github.com/Minestom/Minestom.git
synced 2025-02-14 19:32:17 +01:00
Optimize PooledBuffers
Signed-off-by: TheMode <themode@outlook.fr>
This commit is contained in:
parent
81553e2816
commit
098885cc7f
@ -1,35 +1,32 @@
|
||||
package net.minestom.server.utils.binary;
|
||||
|
||||
import org.jctools.queues.MessagePassingQueue;
|
||||
import org.jctools.queues.MpmcUnboundedXaddArrayQueue;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import java.lang.ref.Cleaner;
|
||||
import java.lang.ref.SoftReference;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
@ApiStatus.Internal
|
||||
@ApiStatus.Experimental
|
||||
public final class PooledBuffers {
|
||||
private final static Queue<SoftReference<BinaryBuffer>> POOLED_BUFFERS = new ConcurrentLinkedQueue<>();
|
||||
private final static MessagePassingQueue<SoftReference<BinaryBuffer>> POOLED_BUFFERS = new MpmcUnboundedXaddArrayQueue<>(1024);
|
||||
private final static int BUFFER_SIZE = Integer.getInteger("minestom.pooled-buffer-size", 262_143);
|
||||
private final static Cleaner CLEANER = Cleaner.create();
|
||||
|
||||
public static BinaryBuffer get() {
|
||||
BinaryBuffer buffer = null;
|
||||
BinaryBuffer buffer;
|
||||
SoftReference<BinaryBuffer> ref;
|
||||
while ((ref = POOLED_BUFFERS.poll()) != null) {
|
||||
buffer = ref.get();
|
||||
if (buffer != null) break;
|
||||
while ((ref = POOLED_BUFFERS.relaxedPoll()) != null) {
|
||||
if ((buffer = ref.get()) != null) return buffer;
|
||||
}
|
||||
return Objects.requireNonNullElseGet(buffer, () -> BinaryBuffer.ofSize(BUFFER_SIZE));
|
||||
return BinaryBuffer.ofSize(BUFFER_SIZE);
|
||||
}
|
||||
|
||||
public static void add(BinaryBuffer buffer) {
|
||||
buffer.clear();
|
||||
POOLED_BUFFERS.add(new SoftReference<>(buffer));
|
||||
POOLED_BUFFERS.relaxedOffer(new SoftReference<>(buffer.clear()));
|
||||
}
|
||||
|
||||
public static int count() {
|
||||
|
Loading…
Reference in New Issue
Block a user