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