java 缓冲池 BufferPool
2017-02-06 11:32
471 查看
/** * 缓冲池 */ 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); } }
相关文章推荐
- Android之使用Http协议实现文件上传功能
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- SQL Server 2016里的sys.dm_exec_input_buffer的问题
- 揭秘SQL Server 2014有哪些新特性(2)-固态硬盘 Buffer Pool(缓冲池) 扩展
- php中ob(Output Buffer 输出缓冲)函数使用方法
- php中mysql操作buffer用法详解
- Protocol Buffer技术深入理解(C++实例)
- 使用node.js中的Buffer类处理二进制数据的方法
- mysqldump造成Buffer Pool污染的研究
- 浅谈Node.js:Buffer模块
- mysql read_buffer_size 设置多少合适
- Node.js中使用Buffer编码、解码二进制数据详解
- nginx高并发配置
- 用pdo_oci 取数据报错或被截取 UTF-8 output gets truncated
- Some Notes of Protocol Buffer C++
- 优化mysql之key_buffer_size设置
- mysql优化的重要参数 key_buffer_size table_cache
- mysql read_buffer_size 设置多少合适
- SQL Server 2016里的sys.dm_exec_input_buffer的问题
- buffer和cache的区别