对象池
对象池(object pool pattern)是一种设计模式。维基百科的解释:The object pool pattern uses a set of initialized objects kept ready to use – a "pool" – rather than allocating and destroying them on demand. 对象池的思想是准备好一堆初始化/实例化好的对象,等到使用的时候直接从“池子”里获取一个,从而避免对象的构造与初始化时间。
使用对象池的场景具有两个特点:这个对象初始化、实例化的代价高,使用频繁。
对象池在并发环境下的使用
一般来说,在串行环境下使用对象池的意义并没有那么大。它本身就是为了节省对象的构造初始化时间而存在的。但是当在高并发环境下使用对象池时,情况会变得有些复杂。因为对象池本身就是临界资源,线程间的并发访问必定会导致资源的访问竞争(Contention)。那么在并发环境下,对象池的使用方式有以下几种:
1、使用全局锁:当线程试图从对象池里获取一个对象时,它首先要获取对象池的锁,然后再Get一个对象(指针或引用),最后释放锁。等到使用完成,再将对象放回到对象池中时,同样要先获得锁,再Reclaim,再释放锁。
2、使用元素粒度锁