對象池

對象池中存放的都是一些創建特別耗資源的對象,每次使用都創建很耗資源,所以用對象池預先創建一些對象,需要時從池中取出對象,不需要時將對象放回池中,提高代碼效率。


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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章