java 缓冲池 BufferPool

    xiaoxiao2021-03-26  28

    /** * 缓冲池 */ public class BufferPool { private static final int BUFFER_SIZE = 2 * 1024 * 1024; //缓冲包2M private static final int BUFFER_MAX_NUM = 20; //缓冲池保留最大数量 private static final ConcurrentLinkedQueue<byte[]> buffers = new ConcurrentLinkedQueue<byte[]>(); private static AtomicInteger countCreated = new AtomicInteger(0); //已创建的缓冲包个数 /** 分配 */ public static byte[] allocate() { byte[] result = buffers.poll(); //创建新缓冲包 if(result == null) { result = new byte[BUFFER_SIZE]; //记录创建个数 int count = countCreated.incrementAndGet(); //日志 if(count <= BUFFER_MAX_NUM) { LogCore.CORE.info("创建新的BufferPool缓冲池,已创建总数量:count={}", count); } else { LogCore.CORE.warn("创建新的BufferPool缓冲池,已创建总数量:count={}", count, new Throwable()); } } return result; } /** * 回收 * @param buff */ public static void deallocate(byte[] buff) { //缓冲池已达上限 if(buffers.size() >= BUFFER_MAX_NUM) return; //回收的缓冲大小必须正确 if(buff.length != BUFFER_SIZE) return; //加回到池中 buffers.add(buff); } }
    转载请注明原文地址: https://ju.6miu.com/read-663961.html

    最新回复(0)