摘要:單例與對象池的區(qū)別首先單例和對象池的目的都是為了避免頻繁的創(chuàng)建對象帶來的系統(tǒng)的開銷。池借組與引用可以在內(nèi)存吃緊時被自動回收來管理對象池中的對象,它可以隨著對對象的需要而不斷增加。
common-pool2 池技術(shù)
池技術(shù),主要用于管理對象,做到對象可以重用,避免多次創(chuàng)建對象的開銷,是一種比較常用的技術(shù)。比如DB數(shù)據(jù)源的連接池。
在Java中頻繁的創(chuàng)建對象和銷毀對象都會消耗性能。為了避免這種問題,我們常會用到池技術(shù)。我們肯定聽說過一些術(shù)語,比如:線程池,連接池。Executor調(diào)度器會管理著一個線程池,使提交的task由線程池
中的空閑狀態(tài)的線程去調(diào)度執(zhí)行。我們創(chuàng)建數(shù)據(jù)庫連接都會使用到連接池,像c3p0,這些都是我們經(jīng)常接觸到的池技術(shù)用到的地方。
首先單例和對象池的目的都是為了避免頻繁的創(chuàng)建對象帶來的系統(tǒng)的開銷。單例是某個對象只希望在jvm中存在一個實(shí)例,當(dāng)任何其它對象調(diào)用單例對象時不會因?yàn)槠渌鼘ο笳谑褂眠@個單例對象而遭到阻塞,另外也不會同時出現(xiàn)多個對象需要更改單例對象的情況。換句話說,也就是說:
在單例對象上一般不會存在鎖,競爭的資源。
單例對象是一種線程安全的對象
所以這樣的對象,我們只希望創(chuàng)建一個就好。而對象池正好和單例的特性相反。
這里主要說下常用到的對象池管理組件common-pool2
common-pool2對象池技術(shù),主要用于管理對象,做到對象可以重用,避免多次創(chuàng)建對象的開銷。
common-pool2是apache開源下的對象池管理組件,是目前Java項(xiàng)目中使用到最廣的對象池管理組件
在實(shí)際項(xiàng)目中,會有很多地方,常用的tcp連接池,比如db,redis連接的組件都會使用到common-pool2作為連接池管理
common-pool2基本構(gòu)思思想就是:利用一個集合來管理創(chuàng)建的對象,這個集合就稱之為池。當(dāng)需要使用到對象時,從池中拿取一個空閑狀態(tài)的對象,用完之后在放入到池中。另外可以讓使用者個性化的配置池的策略,
比如池對象的大小,空閑對象大小,當(dāng)池中對象都處于工作狀態(tài)下對象池的增長策略,當(dāng)去從對象池中拿取一個對象可以等待的時間等。
GenericObjectPool:可以設(shè)置池中最大的空閑個數(shù),最大的對象實(shí)例化個數(shù)
GenericKeyedObjectPool:對于相同的key的對象池提供同樣的池策略
SoftReferenceObjectPool:基于SoftReference實(shí)現(xiàn),可以隨著需要自動增加對象的個數(shù),而對象的回收利用gc
GenericObjectPoolGenericObjectPool池利用LinkedBlockingDeque作為對象管理的容器和一個名為idle object eviction的驅(qū)逐線程定時查看空閑的對象,來保證空閑的對象不會超過用戶的設(shè)置。
SoftReferenceObjectPoolSoftReferenceObjectPool池借組與SoftReference引用可以在內(nèi)存吃緊時被gc自動回收來管理對象池中的對象,它可以隨著對對象的需要而不斷增加。與GenericObjectPool池比起來少了一個驅(qū)逐線程去回收空閑的對象和無用的對象。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/64715.html
摘要:使用提供了中對象池管理方式,它們的使用方式基本一樣,這里以對象池為例介紹其使用方式,一般實(shí)現(xiàn)自己的對象池需要經(jīng)過個步驟實(shí)現(xiàn)接口該接口是一種工廠模式,實(shí)現(xiàn)其目的是讓對象池通過該工廠模式創(chuàng)建管理的對象創(chuàng)建對象池實(shí)例創(chuàng)建對象池我們假設(shè)對象是一 common-pool2 使用 common-pool2提供了3中對象池管理方式,它們的使用方式基本一樣,這里以GenericObjectPool對象...
摘要:如果為負(fù)值,表示不運(yùn)行檢測線程。默認(rèn)為策略的類名,默認(rèn)為這里就用到了上面提到的兩個參數(shù)對象池原理分析避免泄漏配置參數(shù)詳解,以及資源回收,從池中獲取資源,將資源返還給池邏輯解析 序 本文主要解析一下apache common pools下的GenericObjectPool的參數(shù)設(shè)置 GenericObjectPool commons-pool2-2.4.2-sources.jar!/o...
摘要:序本文主要聊聊的參數(shù)。主要用來做連接池的泄露檢測用。的狀態(tài)一般是用于連接泄露的檢測,檢測的是在使用的對象,比如懷疑那個對象被占用時間超長,那估計(jì)是程序異?;?qū)е聦ο罅说洑w還,或者對象之后使用時間太長。 序 本文主要聊聊GenericObjectPool的abandon參數(shù)。主要用來做連接池的泄露檢測用。 object的狀態(tài) commons-pool2-2.4.2-sources.j...
摘要:連接池是一個基于的通用連接池,常被用作數(shù)據(jù)庫連接池。依賴依賴版本安裝通過安裝。使用更多示例。 連接池 open-smf/connection-pool 是一個基于Swoole的通用連接池,常被用作數(shù)據(jù)庫連接池。 依賴 依賴 版本 PHP >=7.0.0 Swoole >=4.2.9 Recommend 4.2.13+ 安裝 通過Composer安裝。 comp...
摘要:在本教程中,我會介紹如何只使用低級別的工具從零開始構(gòu)建卷積神經(jīng)網(wǎng)絡(luò),以及使用可視化我們的計(jì)算圖和網(wǎng)絡(luò)的表現(xiàn)。選擇模型接下來,我必須決定使用哪個卷積神經(jīng)網(wǎng)絡(luò)的模型。實(shí)質(zhì)上,大多數(shù)卷積神經(jīng)網(wǎng)絡(luò)都包含卷積和池化。 如果使用TensorFlow的所有較高級別的工具,例如tf.contrib.learn和Keras,你可以輕松地使用非常少量的代碼來構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)。但是經(jīng)常使用這些較高級別的應(yīng)用,你就...
閱讀 2885·2023-04-26 01:47
閱讀 3658·2023-04-25 23:45
閱讀 2563·2021-10-13 09:39
閱讀 663·2021-10-09 09:44
閱讀 1880·2021-09-22 15:59
閱讀 2896·2021-09-13 10:33
閱讀 1846·2021-09-03 10:30
閱讀 704·2019-08-30 15:53