Package io.netty.util

Class Recycler<T>

    • Field Detail

      • 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
    • Constructor Detail

      • Recycler

        protected Recycler​(int maxCapacity,
                           boolean unguarded)
        USE IT CAREFULLY!
        This is creating a shareable Recycler which get() can be called concurrently from different Threads.
        Usually Recyclers uses some form of thread-local storage, but this constructor is disabling it and using a single pool of instances instead, sized as maxCapacity
        This is NOT enforcing pooled instances states to be validated if unguarded = true: it means that ObjectPool.Handle.recycle(Object) is not checking that object is the same which was recycled and assume no other recycling happens concurrently (similar to what Recycler.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 if unguarded = true as stated by Recycler(boolean) and allows to pin the recycler to a specific Thread, if owner is not null.

        Since this method has been introduced for performance-sensitive cases it doesn't validate if get() is called from the owner Thread: it assumes get() 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 if unguarded = true as stated by Recycler(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 if unguarded = true and allows pinning the recycler to a specific Thread, as stated by Recycler(Thread, boolean).
        It also allows tuning the chunk size used for local pooling and the max capacity per thread.
        Throws:
        java.lang.IllegalArgumentException - if owner is null.
      • Recycler

        @Deprecated
        protected Recycler​(int maxCapacityPerThread,
                           int maxSharedCapacityFactor,
                           int ratio,
                           int maxDelayedQueuesPerThread)
        Deprecated.
        Use one of the following instead: Recycler(), Recycler(int), Recycler(int, int, int).
      • Recycler

        @Deprecated
        protected Recycler​(int maxCapacityPerThread,
                           int maxSharedCapacityFactor,
                           int ratio,
                           int maxDelayedQueuesPerThread,
                           int delayedQueueRatio)
        Deprecated.
        Use one of the following instead: Recycler(), Recycler(int), Recycler(int, int, int).
      • 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 if unguarded =true as stated by Recycler(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 if unguarded =true as stated by Recycler(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 the Recycler from the current Thread if it was pinned, see Recycler(Thread, boolean).

        Be aware that this method is not thread-safe: it's necessary to allow a Thread to be garbage collected even if Recycler.Handles are still referenced by other objects.

      • threadLocalSize

        final int threadLocalSize()
      • newObject

        protected abstract T newObject​(Recycler.Handle<T> handle)
        Parameters:
        handle - can NOT be null.