Package com.fasterxml.jackson.core.util
Interface RecyclerPool<P extends RecyclerPool.WithPool<P>>
- Type Parameters:
P
- Type of Objects pool recycles
- All Superinterfaces:
Serializable
- All Known Implementing Classes:
JsonRecyclerPools.BoundedPool
,JsonRecyclerPools.ConcurrentDequePool
,JsonRecyclerPools.LockFreePool
,JsonRecyclerPools.NonRecyclingPool
,JsonRecyclerPools.ThreadLocalPool
,RecyclerPool.BoundedPoolBase
,RecyclerPool.ConcurrentDequePoolBase
,RecyclerPool.LockFreePoolBase
,RecyclerPool.NonRecyclingPoolBase
,RecyclerPool.StatefulImplBase
,RecyclerPool.ThreadLocalPoolBase
API for object pools that control creation and possible reuse of
objects that are costly to create (often things like encoding/decoding buffers).
Also contains partial (base) implementations for pools that use different strategies on retaining objects for reuse. Following implementations are included:
RecyclerPool.NonRecyclingPoolBase
which does not retain or recycle anything and will always simply construct and return new instance whenacquireBufferRecycler
is calledRecyclerPool.ThreadLocalPoolBase
which usesThreadLocal
to retain at most 1 object perThread
.RecyclerPool.BoundedPoolBase
is "bounded pool" and retains at most N objects (default value beingRecyclerPool.BoundedPoolBase.DEFAULT_CAPACITY
) at any given time.- Two implementations --
RecyclerPool.ConcurrentDequePoolBase
,RecyclerPool.LockFreePoolBase
-- are "unbounded" and retain any number of objects released: in practice it is at most the highest number of concurrently usedBufferRecycler
s.
Default implementations are also included as nested classes.
- Since:
- 2.16
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic class
RecyclerPool.BoundedPoolBase<P extends RecyclerPool.WithPool<P>>
RecyclerPool
implementation that uses a bounded queue (ArrayBlockingQueue
for recycling instances.static class
RecyclerPool
implementation that usesConcurrentLinkedDeque
for recycling instances.static class
RecyclerPool.LockFreePoolBase<P extends RecyclerPool.WithPool<P>>
RecyclerPool
implementation that uses a lock free linked list for recycling instances.static class
RecyclerPool
implementation that does not use any pool but simply creates new instances when necessary.static class
RecyclerPool.StatefulImplBase<P extends RecyclerPool.WithPool<P>>
Intermediate base class for instances that are stateful and require special handling with respect to JDK serialization, to retain "global" reference distinct from non-shared ones.static class
DefaultRecyclerPool
implementation that usesThreadLocal
for recycling instances.static interface
RecyclerPool.WithPool<P extends RecyclerPool.WithPool<P>>
Simple add-on interface that poolable entities must implement. -
Method Summary
Modifier and TypeMethodDescriptiondefault P
Method called to acquire a Pooled value from this pool AND make sure it is linked back to thisRecyclerPool
as necessary for it to be released (seereleasePooled(P)
) later after usage ends.Method for sub-classes to implement for actual acquire logic; called byacquireAndLinkPooled()
.void
releasePooled
(P pooled) Method that should be called when previously acquired (seeacquireAndLinkPooled()
) pooled value that is no longer needed; this lets pool to take ownership for possible reuse.
-
Method Details
-
acquireAndLinkPooled
Method called to acquire a Pooled value from this pool AND make sure it is linked back to thisRecyclerPool
as necessary for it to be released (seereleasePooled(P)
) later after usage ends. Actual acquisition is done by a call toacquirePooled()
.Default implementation calls
acquirePooled()
followed by a call toRecyclerPool.WithPool.withPool(com.fasterxml.jackson.core.util.RecyclerPool<P>)
.- Returns:
- Pooled instance for caller to use; caller expected
to call
releasePooled(P)
after it is done using instance.
-
acquirePooled
P acquirePooled()Method for sub-classes to implement for actual acquire logic; called byacquireAndLinkPooled()
.- Returns:
- Instance acquired (pooled or just constructed)
-
releasePooled
Method that should be called when previously acquired (seeacquireAndLinkPooled()
) pooled value that is no longer needed; this lets pool to take ownership for possible reuse.- Parameters:
pooled
- Pooled instance to release back to pool
-