~param bigtype ~param type ~param zero ~make ByteBufferPool.java,Byte,byte,(byte)0 ~make IntBufferPool.java,Int,int,0 ~make FloatBufferPool.java,Float,float,0.0f ~make DoubleBufferPool.java,Double,double,0.0 package Utils; import java.util.Arrays; import java.util.concurrent.ConcurrentLinkedQueue; public class BufferPool { public static final boolean PERSIST_ON_RELEASE = true; private static final ConcurrentLinkedQueue<[]> q = new ConcurrentLinkedQueue<>(); public static [] acquireAsIs(int minSize) { if (minSize <= 0) return null; [] buffer; do { buffer = q.poll(); if (buffer == null) return new [minSize]; } while (buffer.length < minSize); return buffer; } public static [] acquireZeroed(int minSize) { if (minSize <= 0) return null; [] buffer = acquireAsIs(minSize); Arrays.fill(buffer, 0, minSize, ); return buffer; } public static [] release([] buffer) { if (PERSIST_ON_RELEASE && buffer != null) q.add(buffer); return null; } }