~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 <bigtype>BufferPool
{
public static final boolean PERSIST_ON_RELEASE = true;
private static final ConcurrentLinkedQueue<<type>[]> q = new ConcurrentLinkedQueue<>();
public static <type>[] acquireAsIs(int minSize)
{
if (minSize <= 0)
return null;
<type>[] buffer;
do {
buffer = q.poll();
if (buffer == null)
return new <type>[minSize];
}
while (buffer.length < minSize);
return buffer;
}
public static <type>[] acquireZeroed(int minSize)
{
if (minSize <= 0)
return null;
<type>[] buffer = acquireAsIs(minSize);
Arrays.fill(buffer, 0, minSize, <zero>);
return buffer;
}
public static <type>[] release(<type>[] buffer)
{
if (PERSIST_ON_RELEASE && buffer != null)
q.add(buffer);
return null;
}
}