試用 commons-pool

上一篇文章中提到,提高 Java 程序的性能的一個基本想法是,減少頻繁的對象創建和銷燬。

 

最近仔細分析了一下自己的一個程序,因爲這個程序需要進行大量的字符串操作,會大量新建出臨時的 StringBuffer 對象,這種對象用完一次就扔。尤其是在一個函數中,每次調用這個函數的時候都新建一個 StringBuffer ,函數退出的時候這個 StringBuffer 就沒用了,而這個函數會被調用上萬次,積累下來對性能的損耗可想而知。

 

所以我想到了使用對象池技術:每次用完 StringBuffer 並不銷燬,而是把它存在那裏,下次要用的時候只需要調用 setLength(0) 就又可以再次利用了,低碳環保。

 

正好看到 Apache Commons 有個 commons-pool(http://commons.apache.org/pool/),一種實現對象池的框架。於是試用了一下。

 

commons-pool 對對象池的抽象是:

“借出”對象和“歸還”對象,這個用詞很生動形象。

 

在池中的對象有兩種狀態:active 表示這個對象正在被程序使用;idle 空閒態,表示該對象在池中空閒,可以被分配出去。

 

於是我們不難理解如下配置:

 

maxIdle :指定空閒對象的最大數目。如果空閒對象超出這個值,GenericObjectPool 會清理空閒對象,減少到這個值。這是爲了避免池中的對象過多,會佔用過多的內存。

 

好了,廢話不多說,直接上代碼:

在理解了對象池的實現原理之後,我們也可以自己實現一個,下面是我自己實現的簡單 StringBuffer 池:

 

這裏使用 Hashtable 來保證線程安全。

發佈了48 篇原創文章 · 獲贊 9 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章