From 7ebbfb88c25c3e296f33dbb4f5b0fa96e84212bf Mon Sep 17 00:00:00 2001 From: free will <2647778488@qq.com> Date: Fri, 19 Nov 2021 16:29:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ByteBufferPool?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/util/ByteBufferPool.java | 35 ++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/util/ByteBufferPool.java diff --git a/src/main/java/util/ByteBufferPool.java b/src/main/java/util/ByteBufferPool.java new file mode 100644 index 0000000..0ca9beb --- /dev/null +++ b/src/main/java/util/ByteBufferPool.java @@ -0,0 +1,35 @@ +package util; + +import java.nio.ByteBuffer; +import java.util.concurrent.ConcurrentLinkedQueue; + +/* + * @Author: Wang Feng + * @Description: 减少堆内存的消耗 + * @Version: 1.0.0 + * @Date: 15:21 2021/11/19 + * @Copyright: MIN-Group;国家重大科技基础设施——未来网络北大实验室;深圳市信息论与未来网络重点实验室 + */ +public class ByteBufferPool { + private static final int BUFFER_SIZE = 16384; + private static ConcurrentLinkedQueue pool = new ConcurrentLinkedQueue<>(); + + public static ByteBuffer acquire() + { + ByteBuffer buffer = pool.poll(); + if (buffer == null) + buffer = ByteBuffer.allocateDirect(BUFFER_SIZE); // Using DirectBuffer for zero-copy + return buffer; + } + + public static void release(ByteBuffer buffer) + { + buffer.clear(); + pool.offer(buffer); + } + + public static void clear() + { + pool.clear(); + } +}