对象池化的基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成的开销。用于充当保存对象的“容器”的对象,被称为“对象池”。
对于没有状态的对象,在重复使用之前,无需进行任何处理;
对于有状态的对象,在重复使用之前,就需要把它们恢复到等同于刚刚生成时的状态。
由于条件的限制,恢复某个对象的状态的操作不可能实现了的话,就得把这个对象抛弃,改用新创建的实例了。
并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。
对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。
Objectpool就是一个管理对象的池子。
主要就靠3个接口来管理:
ObjectPool定义了池接口
主要两个实现抽象类:BaseObjectPool和KeyedObjectPool。
有一些基本方法比如
从对象池取对象调用borrowObject()方法
将对象放回使用returnObject()
选择clear()
而不需要对象池选择关闭时使用close()等。
在具体的Pool实现中,会依赖PoolableObjectFactory接口。
PoolableObjectFactory定义了这样一个factory去管理这些对象。
该接口有makeObject()方法,我们自己的factory实现里可以利用这个方法去创建个性化的对象。
有创建就有销毁,destroyObject(Object obj)方法就用来销毁对象。
activateObject(Object obj)方法用来激活对象,也就是说令对象可用。
passivateObject(Object obj)方法用来将对象作为idle状态。
同时还有validateObject(Object obj)方法来检验对象是否可以由pool安全返回。
ObjectPoolFactory用来管理pool的一个factory。
http://www.cnblogs.com/shipengzhi/archive/2011/06/02/2068628.html