在说 evict 之前,我们先看下 池对象的状态定义:
public enum PooledObjectState {
IDLE,
ALLOCATED,
EVICTION,
EVICTION_RETURN_TO_HEAD,
VALIDATION,
VALIDATION_PREALLOCATED,
VALIDATION_RETURN_TO_HEAD,
INVALID,
ABANDONED,
RETURNING;
}
所谓 evict 就是把池里的对象踢出去,Evictor 类专门负责这个任务,它会调用 evict 方法,这个 evict 方法用 EvictionPolicy 类来做 evict 判断。
evict = evictionPolicy.evict(evictionConfig, underTest, this.idleObjects.size());