物件池化技術

2021-08-29 03:16:57 字數 925 閱讀 9530

物件池化技術

物件池化的基本思路是:將用過的物件儲存起來,等下一次需要這種物件的時候,再拿出來重複使用,從而在一定程度上減少頻繁建立物件所造成的開銷。用於充當儲存物件的「容器」的物件,被稱為「物件池」(object pool,或簡稱pool)。

對於沒有狀態的物件(例如string),在重複使用之前,無需進行任何處理;對於有狀態的物件(例如stringbuffer),在重複使用之前,就需要把它們恢復到等同於剛剛生成時的狀態。由於條件的限制,恢復某個物件的狀態的操作不可能實現了的話,就得把這個物件拋棄,改用新建立的例項了。

並非所有物件都適合拿來池化——因為維護物件池也要造成一定開銷。對生成時開銷不大的物件進行池化,反而可能會出現「維護物件池的開銷」大於「生成新物件的開銷」,從而使效能降低的情況。但是對於生成時開銷可觀的物件,池化技術就是提高效能的有效策略了。

什麼時候不要池化

採用物件池化的本意,是要通過減少物件生成的次數,減少花在物件初始化上面的開銷,從而提高整體的效能。然而池化處理本身也要付出代價,因此,並非任何情況下都適合採用物件池化。

對於類似point這樣的輕量級物件,進行池化處理後,效能反而下降,因此不宜池化;  

對於類似hashtable這樣的中量級物件,進行池化處理後,效能基本不變,一般不必池化(池化會使**變複雜,增大維護的難度);

對於類似jpanel這樣的重量級物件,進行池化處理後,效能有所上公升,可以考慮池化。

根據使用方法的不同,實際的情況可能與這一測量結果略有出入。在配置較高的機器和技術較強的虛擬機器上,不宜池化的物件的範圍可能會更大。不過,對於像網路和資料庫連線這類重量級的物件來說,目前還是有池化的必要。

基本上,只在重複生成某種物件的操作成為影響效能的關鍵因素的時候,才適合進行物件池化。如果進行池化所能帶來的效能提高並不重要的話,還是不採用物件池化技術,以保持**的簡明,而使用更好的硬體和更棒的虛擬機器來提高效能為佳。

物件池化技術相關

在系統設計中,經常會使用 池 的概念。比如資料庫連線池,socket連線池,執行緒池,元件佇列。池 可以節省物件重複建立和初始化所耗費 的時間,可以簡化物件獲取和使用的過程。對於那些被系統頻繁請求和使用的物件,如果使用這種機制,可以使系統效能得到很大提高。特別象資料庫連線這種對 象,客戶端與資料庫伺...

池化技術 執行緒池

執行緒池 任務 等待任務 全域性的任務佇列queue無任務且無銷毀,任務新增函式 等待add的signal 載入任務 add將新建任務指標task賦予queue 執行任務 執行緒池內任一rtn獲取當前佇列的頭 第乙個任務task 執行,並將此任務從佇列中剔除 退出執行緒池內某一rtn 根據實際的程式...

物件記憶體池技術

所謂的物件記憶體池技術設計過程如下 首先為某種物件預先生成若干個空閒物件 並且使用物件管理類進行管理。應用程式在需要使用此物件時,即向管理物件申請空閒物件.管理物件即檢視物件記憶體池,如果發現存在未使用空閒物件,即分配給申請者。如果發現已無空閒物件,可自行擴充物件記憶體池,並且滿足申請物件的需求,也...