Class SoftReferencePool<T>

java.lang.Object
cloud.opencode.base.pool.impl.SoftReferencePool<T>
Type Parameters:
T - the type of object being pooled - 池化对象类型
All Implemented Interfaces:
ObjectPool<T>, AutoCloseable

public class SoftReferencePool<T> extends Object implements ObjectPool<T>
SoftReferencePool - Soft Reference Object Pool SoftReferencePool - 软引用对象池

Object pool using soft references for idle objects. Objects can be garbage collected when memory is low, providing automatic memory management.

使用软引用存储空闲对象的对象池。当内存不足时对象可被垃圾回收,提供自动内存管理。

Features | 主要功能:

  • Soft reference for idle objects - 空闲对象使用软引用
  • Automatic memory reclaim - 自动内存回收
  • GC-friendly pooling - GC友好的池化
  • No hard limit on idle objects - 空闲对象无硬限制

Usage Examples | 使用示例:

SoftReferencePool<ExpensiveObject> pool = new SoftReferencePool<>(factory, config);

ExpensiveObject obj = pool.borrowObject();
try {
    // use object
} finally {
    pool.returnObject(obj);
}
// Object may be GC'd if memory is low

Performance | 性能特性:

  • Lower memory footprint under pressure - 内存压力下占用更低
  • May recreate objects after GC - GC后可能需要重建对象

Security | 安全性:

  • Thread-safe: Yes (ConcurrentLinkedQueue, AtomicInteger) - 线程安全: 是(ConcurrentLinkedQueue,AtomicInteger)
  • Null-safe: No - 空值安全: 否
Since:
JDK 25, opencode-base-pool V1.0.0
Author:
Leon Soo www.LeonSoo.com
See Also:
  • Constructor Details

    • SoftReferencePool

      public SoftReferencePool(PooledObjectFactory<T> factory)
      Creates a soft reference pool with default configuration. 使用默认配置创建软引用池。
      Parameters:
      factory - the object factory - 对象工厂
    • SoftReferencePool

      public SoftReferencePool(PooledObjectFactory<T> factory, PoolConfig config)
      Creates a soft reference pool with custom configuration. 使用自定义配置创建软引用池。
      Parameters:
      factory - the object factory - 对象工厂
      config - the pool configuration - 池配置
  • Method Details

    • borrowObject

      public T borrowObject() throws OpenPoolException
      Description copied from interface: ObjectPool
      Borrows an object from the pool. 从池中借用对象。

      Uses default timeout from pool configuration.

      使用池配置的默认超时。

      Specified by:
      borrowObject in interface ObjectPool<T>
      Returns:
      the borrowed object - 借用的对象
      Throws:
      OpenPoolException - if borrowing fails - 如果借用失败
    • borrowObject

      public T borrowObject(Duration timeout) throws OpenPoolException
      Description copied from interface: ObjectPool
      Borrows an object from the pool with timeout. 带超时从池中借用对象。
      Specified by:
      borrowObject in interface ObjectPool<T>
      Parameters:
      timeout - the maximum wait time - 最大等待时间
      Returns:
      the borrowed object - 借用的对象
      Throws:
      OpenPoolException - if borrowing fails or times out - 如果借用失败或超时
    • returnObject

      public void returnObject(T obj)
      Description copied from interface: ObjectPool
      Returns an object to the pool. 将对象归还到池中。
      Specified by:
      returnObject in interface ObjectPool<T>
      Parameters:
      obj - the object to return - 要归还的对象
    • invalidateObject

      public void invalidateObject(T obj)
      Description copied from interface: ObjectPool
      Invalidates an object (will not be returned to pool). 使对象失效(不会返回池中)。
      Specified by:
      invalidateObject in interface ObjectPool<T>
      Parameters:
      obj - the object to invalidate - 要失效的对象
    • addObject

      public void addObject() throws OpenPoolException
      Description copied from interface: ObjectPool
      Adds a new object to the pool. 向池中添加新对象。
      Specified by:
      addObject in interface ObjectPool<T>
      Throws:
      OpenPoolException - if adding fails - 如果添加失败
    • getNumIdle

      public int getNumIdle()
      Description copied from interface: ObjectPool
      Gets the number of idle objects. 获取空闲对象数。
      Specified by:
      getNumIdle in interface ObjectPool<T>
      Returns:
      the idle count - 空闲数
    • getNumActive

      public int getNumActive()
      Description copied from interface: ObjectPool
      Gets the number of active (borrowed) objects. 获取活跃(借出)对象数。
      Specified by:
      getNumActive in interface ObjectPool<T>
      Returns:
      the active count - 活跃数
    • clear

      public void clear()
      Description copied from interface: ObjectPool
      Clears all idle objects from the pool. 清除池中所有空闲对象。
      Specified by:
      clear in interface ObjectPool<T>
    • getMetrics

      public PoolMetrics getMetrics()
      Description copied from interface: ObjectPool
      Gets the pool metrics. 获取池指标。
      Specified by:
      getMetrics in interface ObjectPool<T>
      Returns:
      the metrics - 指标
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable