对象池化技术(Object Pooling)

对象池化的基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成的开销。用于充当保存对象的“容器”的对象,被称为“对象池”。


对于没有状态的对象,在重复使用之前,无需进行任何处理;

对于有状态的对象,在重复使用之前,就需要把它们恢复到等同于刚刚生成时的状态。

由于条件的限制,恢复某个对象的状态的操作不可能实现了的话,就得把这个对象抛弃,改用新创建的实例了。


并非所有对象都适合拿来池化――因维护对象池也要造成一定开销

对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。


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


你可能感兴趣的:(对象池化技术(Object Pooling))