Package io.netty.util
Class Recycler<T>
- java.lang.Object
-
- io.netty.util.Recycler<T>
-
- Type Parameters:
T- the type of the pooled object
- Direct Known Subclasses:
AdaptivePoolingAllocator.Magazine.AdaptiveRecycler
public abstract class Recycler<T> extends java.lang.ObjectLight-weight object pool based on a thread-local stack.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classRecycler.BlockingMessageQueue<T>This is an implementation ofMessagePassingQueue, similar to what might be returned fromPlatformDependent.newMpscQueue(int), but intended to be used for debugging purpose.private static classRecycler.DefaultHandle<T>static classRecycler.EnhancedHandle<T>private static classRecycler.GuardedLocalPool<T>static interfaceRecycler.Handle<T>private static classRecycler.LocalPool<H,T>private static classRecycler.LocalPoolHandle<T>We created this handle to avoid having more than 2 concrete implementations ofRecycler.EnhancedHandlei.e.private static classRecycler.UnguardedLocalPool<T>
-
Field Summary
Fields Modifier and Type Field Description private static booleanBATCH_FAST_TL_ONLYprivate static booleanBLOCKING_POOLprivate static intDEFAULT_INITIAL_MAX_CAPACITY_PER_THREADprivate static intDEFAULT_MAX_CAPACITY_PER_THREADprivate static intDEFAULT_QUEUE_CHUNK_SIZE_PER_THREADprivate Recycler.LocalPool<?,T>localPoolprivate static InternalLoggerloggerprivate static Recycler.EnhancedHandle<?>NOOP_HANDLEprivate static Recycler.UnguardedLocalPool<?>NOOP_LOCAL_POOLprivate static intRATIOprivate FastThreadLocal<Recycler.LocalPool<?,T>>threadLocalPool
-
Constructor Summary
Constructors Modifier Constructor Description protectedRecycler()protectedRecycler(boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded = true: it means thatObjectPool.Handle.recycle(Object)is not checking thatobjectis the same which was recycled and assume no other recycling happens concurrently (similar to whatRecycler.EnhancedHandle.unguardedRecycle(Object)does).protectedRecycler(int maxCapacityPerThread)protectedRecycler(int maxCapacity, boolean unguarded)USE IT CAREFULLY!
This is creating a shareableRecyclerwhichget()can be called concurrently from differentThreads.
UsuallyRecyclers uses some form of thread-local storage, but this constructor is disabling it and using a single pool of instances instead, sized asmaxCapacity
This is NOT enforcing pooled instances states to be validated ifunguarded = true: it means thatObjectPool.Handle.recycle(Object)is not checking thatobjectis the same which was recycled and assume no other recycling happens concurrently (similar to whatRecycler.EnhancedHandle.unguardedRecycle(Object)does).protectedRecycler(int maxCapacityPerThread, int maxSharedCapacityFactor)Deprecated.protectedRecycler(int chunksSize, int maxCapacityPerThread, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded = trueas stated byRecycler(boolean), but it allows to tune the chunk size used for local pooling.protectedRecycler(int maxCapacityPerThread, int interval, int chunkSize)protectedRecycler(int maxCapacityPerThread, int interval, int chunkSize, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded =trueas stated byRecycler(boolean).privateRecycler(int maxCapacityPerThread, int ratio, int chunkSize, boolean useThreadLocalStorage, java.lang.Thread owner, boolean unguarded)protectedRecycler(int maxCapacityPerThread, int maxSharedCapacityFactor, int ratio, int maxDelayedQueuesPerThread)Deprecated.protectedRecycler(int maxCapacityPerThread, int maxSharedCapacityFactor, int ratio, int maxDelayedQueuesPerThread, int delayedQueueRatio)Deprecated.protectedRecycler(int maxCapacityPerThread, int interval, int chunkSize, java.lang.Thread owner, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded =trueas stated byRecycler(boolean).protectedRecycler(int chunkSize, int maxCapacityPerThread, java.lang.Thread owner, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded = trueand allows pinning the recycler to a specificThread, as stated byRecycler(Thread, boolean).
It also allows tuning the chunk size used for local pooling and the max capacity per thread.protectedRecycler(java.lang.Thread owner, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded = trueas stated byRecycler(boolean)and allows to pin the recycler to a specificThread, ifowneris notnull.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description Tget()protected abstract TnewObject(Recycler.Handle<T> handle)booleanrecycle(T o, Recycler.Handle<T> handle)Deprecated.(package private) intthreadLocalSize()static voidunpinOwner(Recycler<?> recycler)
-
-
-
Field Detail
-
logger
private static final InternalLogger logger
-
NOOP_HANDLE
private static final Recycler.EnhancedHandle<?> NOOP_HANDLE
-
NOOP_LOCAL_POOL
private static final Recycler.UnguardedLocalPool<?> NOOP_LOCAL_POOL
-
DEFAULT_INITIAL_MAX_CAPACITY_PER_THREAD
private static final int DEFAULT_INITIAL_MAX_CAPACITY_PER_THREAD
- See Also:
- Constant Field Values
-
DEFAULT_MAX_CAPACITY_PER_THREAD
private static final int DEFAULT_MAX_CAPACITY_PER_THREAD
-
RATIO
private static final int RATIO
-
DEFAULT_QUEUE_CHUNK_SIZE_PER_THREAD
private static final int DEFAULT_QUEUE_CHUNK_SIZE_PER_THREAD
-
BLOCKING_POOL
private static final boolean BLOCKING_POOL
-
BATCH_FAST_TL_ONLY
private static final boolean BATCH_FAST_TL_ONLY
-
localPool
private final Recycler.LocalPool<?,T> localPool
-
threadLocalPool
private final FastThreadLocal<Recycler.LocalPool<?,T>> threadLocalPool
-
-
Constructor Detail
-
Recycler
protected Recycler(int maxCapacity, boolean unguarded)USE IT CAREFULLY!
This is creating a shareableRecyclerwhichget()can be called concurrently from differentThreads.
UsuallyRecyclers uses some form of thread-local storage, but this constructor is disabling it and using a single pool of instances instead, sized asmaxCapacity
This is NOT enforcing pooled instances states to be validated ifunguarded = true: it means thatObjectPool.Handle.recycle(Object)is not checking thatobjectis the same which was recycled and assume no other recycling happens concurrently (similar to whatRecycler.EnhancedHandle.unguardedRecycle(Object)does).
-
Recycler
protected Recycler(boolean unguarded)
USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded = true: it means thatObjectPool.Handle.recycle(Object)is not checking thatobjectis the same which was recycled and assume no other recycling happens concurrently (similar to whatRecycler.EnhancedHandle.unguardedRecycle(Object)does).
-
Recycler
protected Recycler(java.lang.Thread owner, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded = trueas stated byRecycler(boolean)and allows to pin the recycler to a specificThread, ifowneris notnull.Since this method has been introduced for performance-sensitive cases it doesn't validate if
get()is called from theownerThread: it assumesget()to never happen concurrently.
-
Recycler
protected Recycler(int maxCapacityPerThread)
-
Recycler
protected Recycler()
-
Recycler
protected Recycler(int chunksSize, int maxCapacityPerThread, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded = trueas stated byRecycler(boolean), but it allows to tune the chunk size used for local pooling.
-
Recycler
protected Recycler(int chunkSize, int maxCapacityPerThread, java.lang.Thread owner, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded = trueand allows pinning the recycler to a specificThread, as stated byRecycler(Thread, boolean).
It also allows tuning the chunk size used for local pooling and the max capacity per thread.- Throws:
java.lang.IllegalArgumentException- ifownerisnull.
-
Recycler
@Deprecated protected Recycler(int maxCapacityPerThread, int maxSharedCapacityFactor)Deprecated.
-
Recycler
@Deprecated protected Recycler(int maxCapacityPerThread, int maxSharedCapacityFactor, int ratio, int maxDelayedQueuesPerThread)Deprecated.
-
Recycler
@Deprecated protected Recycler(int maxCapacityPerThread, int maxSharedCapacityFactor, int ratio, int maxDelayedQueuesPerThread, int delayedQueueRatio)Deprecated.
-
Recycler
protected Recycler(int maxCapacityPerThread, int interval, int chunkSize)
-
Recycler
protected Recycler(int maxCapacityPerThread, int interval, int chunkSize, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded =trueas stated byRecycler(boolean).
-
Recycler
protected Recycler(int maxCapacityPerThread, int interval, int chunkSize, java.lang.Thread owner, boolean unguarded)USE IT CAREFULLY!
This is NOT enforcing pooled instances states to be validated ifunguarded =trueas stated byRecycler(boolean).
-
Recycler
private Recycler(int maxCapacityPerThread, int ratio, int chunkSize, boolean useThreadLocalStorage, java.lang.Thread owner, boolean unguarded)
-
-
Method Detail
-
get
public final T get()
-
unpinOwner
public static void unpinOwner(Recycler<?> recycler)
Disassociates theRecyclerfrom the currentThreadif it was pinned, seeRecycler(Thread, boolean).Be aware that this method is not thread-safe: it's necessary to allow a
Threadto be garbage collected even ifRecycler.Handles are still referenced by other objects.
-
recycle
@Deprecated public final boolean recycle(T o, Recycler.Handle<T> handle)
Deprecated.
-
threadLocalSize
final int threadLocalSize()
-
newObject
protected abstract T newObject(Recycler.Handle<T> handle)
- Parameters:
handle- can NOT be null.
-
-