Package org.xerial.snappy.pool
Class CachingBufferPool
- java.lang.Object
-
- org.xerial.snappy.pool.CachingBufferPool
-
- All Implemented Interfaces:
BufferPool
public final class CachingBufferPool extends java.lang.Object implements BufferPool
ABufferPoolimplementation which caches values at fixed sizes.Pooled instances are held as
SoftReferenceto allow GC if necessary.The current fixed sizes are calculated as follows:
- Values < 4KB return 4KB
- 4KB - 32KB to 2KB
- 32KB - 512KB to 16KB
- 512KB - 2MB to 128KB
- 2MB - 16MB to 512KB
- 16MB - 128MB to 4MB
- 128MB - 512MB to 16MB
- 512MB - 1.5 GB to 128MB
- Values > 1.5GB return
Integer.MAX_VALUE
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static interfaceCachingBufferPool.IntFunction<E>
-
Field Summary
Fields Modifier and Type Field Description private static CachingBufferPool.IntFunction<byte[]>ARRAY_FUNCTIONprivate java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<java.nio.ByteBuffer>>>buffersprivate java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<byte[]>>>bytesprivate static CachingBufferPool.IntFunction<java.nio.ByteBuffer>DBB_FUNCTIONprivate static CachingBufferPoolINSTANCE
-
Constructor Summary
Constructors Modifier Constructor Description privateCachingBufferPool()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) static intadjustSize(int size)byte[]allocateArray(int size)Returns abyte[]of size or greater length.java.nio.ByteBufferallocateDirect(int size)Returns adirect ByteBufferof size or greatercapacity.static BufferPoolgetInstance()Returns instance ofCachingBufferPoolfor using cached buffers.private static <E> EgetOrCreate(int size, java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<E>>> map, CachingBufferPool.IntFunction<E> creator)private static <E> java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<E>>optimisticGetEntry(java.lang.Integer key, java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<E>>> map)voidreleaseArray(byte[] buffer)Returns instance to pool for potential future reuse.voidreleaseDirect(java.nio.ByteBuffer buffer)Returns instance to pool for potential future reuse.private static <E> voidreturnValue(E value, java.lang.Integer size, java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<E>>> map)private static introundToPowers(int number, int bits)java.lang.StringtoString()
-
-
-
Field Detail
-
ARRAY_FUNCTION
private static final CachingBufferPool.IntFunction<byte[]> ARRAY_FUNCTION
-
DBB_FUNCTION
private static final CachingBufferPool.IntFunction<java.nio.ByteBuffer> DBB_FUNCTION
-
INSTANCE
private static final CachingBufferPool INSTANCE
-
bytes
private final java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<byte[]>>> bytes
-
buffers
private final java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<java.nio.ByteBuffer>>> buffers
-
-
Method Detail
-
getInstance
public static BufferPool getInstance()
Returns instance ofCachingBufferPoolfor using cached buffers.- Returns:
- instance of
CachingBufferPoolfor using cached buffers.
-
allocateArray
public byte[] allocateArray(int size)
Returns abyte[]of size or greater length.- Specified by:
allocateArrayin interfaceBufferPool- Parameters:
size- The minimum size array required. Must be>= 0.- Returns:
- A
byte[]with length of at least size. - See Also:
BufferPool.releaseArray(byte[])
-
releaseArray
public void releaseArray(byte[] buffer)
Returns instance to pool for potential future reuse.Must not be returned more than 1 time. Must not be used by caller after return.
- Specified by:
releaseArrayin interfaceBufferPool- Parameters:
buffer- Instance to return to pool. Must not benull. Must not be returned more than 1 time. Must not be used by caller after return.
-
allocateDirect
public java.nio.ByteBuffer allocateDirect(int size)
Returns adirect ByteBufferof size or greatercapacity.- Specified by:
allocateDirectin interfaceBufferPool- Parameters:
size- The minimum size buffer required. Must be>= 0.- Returns:
- A
ByteBufferof size or greatercapacity. - See Also:
BufferPool.releaseDirect(ByteBuffer),ByteBuffer.allocateDirect(int)
-
releaseDirect
public void releaseDirect(java.nio.ByteBuffer buffer)
Returns instance to pool for potential future reuse.Must not be returned more than 1 time. Must not be used by caller after return.
- Specified by:
releaseDirectin interfaceBufferPool- Parameters:
buffer- Instance to return to pool. Must not benull. Must not be returned more than 1 time. Must not be used by caller after return.
-
getOrCreate
private static <E> E getOrCreate(int size, java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<E>>> map, CachingBufferPool.IntFunction<E> creator)
-
adjustSize
static int adjustSize(int size)
-
roundToPowers
private static int roundToPowers(int number, int bits)
-
optimisticGetEntry
private static <E> java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<E>> optimisticGetEntry(java.lang.Integer key, java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<E>>> map)
-
returnValue
private static <E> void returnValue(E value, java.lang.Integer size, java.util.concurrent.ConcurrentMap<java.lang.Integer,java.util.concurrent.ConcurrentLinkedDeque<java.lang.ref.SoftReference<E>>> map)
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-