← 中文资源

简体中文版本

对象池

对象池复用预分配实例而非每次新建,用池管理成本换初始化成本——在托管运行时里常常反被它想帮助的回收器拖累。

阅读英文原文

概念定义

构造与销毁都有成本:对象初始化、资源获取、回收器簿记。池通过在借出者之间循环复用实例,把这两类成本一并摊销掉。

工作机制

池暴露 acquire 与 release,配最大尺寸、借用超时、借出或归还时的健康校验等语义。重置发生在归还或获取——更安全的点——清除引用与状态;空闲驱逐在低载时收缩池,健康校验丢弃损坏实例。

使用场景

真正昂贵的资源:数据库连接、原生缓冲、线程、大字节数组。托管运行时先测量:逃逸分析与 TLAB 分配让许多小对象的分配与回收近乎免费。

常见误区

池化廉价琐碎的小对象要付同步开销加陈旧状态 bug,收益为负。借出者不归还时池本身就是泄漏——纪律与超时不可省。归还不重置会在借用者之间泄漏数据,这是经典安全问题;池化的可增长数组意味着借出者永远持有最大尺寸内存。分代回收器下池化对象活得久,膨胀老年代并加重停顿——池成了它声称要消除的 GC 压力。