Apache Common-pool2包提供了一個通用的對象池技術的實現。能夠很方便的基於它來實現本身的對象池,好比DBCP和Jedis他們的內部對象池的實現就是依賴於Common-pool2。
對象的建立和銷燬在必定程度上會消耗系統的資源,雖然jvm的性能在近幾年已經獲得了很大的提升,對於多數對象來講,沒有必要利用對象池技術來進行對象的建立和管理。可是對於有些對象來講,其建立的代價仍是比較昂貴的,好比線程、tcp鏈接、數據庫鏈接等對象,所以對象池技術仍是有其存在的意義。數據庫
1.Apache Common-pool2的實現apache
common-pool2包括三個包:swift
org.apache.commons.pool2:包含了對象池的接口。框架
org.apache.commons.pool2.impl:包含了對象池的具體實現。jvm
org.apache.commons.pool2.proxy:包含了對象池的代理。tcp
commons-pool2主要有三大部分構成:ObjectPool,PooledObjectFactory,PooledObject。性能
ObjectPool:咱們直接操做的對象池,主要包括對象的存取和狀態的管理,具體對象的建立由PooledObjectFactory來實現。.net
PooledObjectFactory:管理具體對象的狀態,好比建立,初始化,驗證對象狀態和銷燬對象。線程
PooledObject:是對須要放入池中的對象的一個包裝類,給對象添加了一些額外的信息,如狀態信息,建立時間,激活時間,關閉時間等。這些添加的信息方便pool來管理和實現一些特定的操做。代理
他們這三者就構成了一個object pool的基本框架。他們的關係能夠用以下的一個圖來描述:
簡單來講,就是由PooledObjectFactory建立對象,而後由PooledObject包裝一下,放入ObjectPool.
引用: