对象池

来源:互联网 发布:linux 命令行输出结果 编辑:程序博客网 时间:2024/04/29 20:00

对象池中存放的都是一些创建特别耗资源的对象,每次使用都创建很耗资源,所以用对象池预先创建一些对象,需要时从池中取出对象,不需要时将对象放回池中,提高代码效率。


Apache Commons Pool

池对象工厂:

PooledObjectFactory(2.0以前叫PoolableObjectFactory)

PooledObjectFactory必是线程安全的,同一个对象同一时间不会被重复使用。

实现这个接口需要重写五个方法

makeObject:需要对象时使用

validateObject:可在activateObject后调用,确保对象可被还回对象池;可在passivateObject前调用,确保对象可被还回对象池

activateObject:取出对象时,需要activate

passivateObject:还回对象时,需要passivate

destroyObject:对象从对象池中废弃时调用


KeyedPooledObjectFactory与PooledObjectFactory类似,只是多了key参数

KeyedPooledObjectFactory<K,V>   vs    PoolableObjectFactory<T>


对象池:

GenericObjectPool

可设置对象池特征:LIFO(后进先出)方式、最大最小空闲数、有效性检查。


GenericKeyedObjectPool

对应KeyedPooledObjectFactory


SoftReferenceObjectPool

使用ArrayList保存对象池里的对象,对象池里不保存对象本身,而是保存它们的软引用

特点:可以保存任意多个对象,对象池不会满;取出对象时,如果对象池已空,会创建新对象;内存不足时,池中对象可以回收。



对象池设计

http://ifeve.com/generic-concurrent-object-pool/

0 0
原创粉丝点击