国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

GenericObjectPool 避免泄漏

Keven / 3103人閱讀

摘要:實(shí)際應(yīng)用中由于程序?qū)崿F(xiàn)的問題,可能造成在一些極端的情況下出現(xiàn)沒有被調(diào)用導(dǎo)致的泄漏問題。在的時(shí)候檢查是否有泄漏的時(shí)候檢查泄漏如果一個(gè)對(duì)象之后秒還沒有返還給,認(rèn)為是泄漏的對(duì)象秒運(yùn)行一次維護(hù)任務(wù)

更多內(nèi)容,請(qǐng)?jiān)L問 https://my.oschina.net/u/5751...

GenericObjectPool

GenericObjectPool 是 Apache Commons Pool 提供的對(duì)象池,使用的時(shí)候需要調(diào)用 borrowObject 獲取一個(gè)對(duì)象,使用完以后需要調(diào)用 returnObject 歸還對(duì)象,或者調(diào)用 invalidateObject 將這個(gè)對(duì)象標(biāo)記為不可再用。

實(shí)際應(yīng)用中由于程序?qū)崿F(xiàn)的問題,可能造成在一些極端的情況下出現(xiàn) borrowObject/invalidateObject 沒有被調(diào)用導(dǎo)致的泄漏問題。對(duì)象泄漏會(huì)導(dǎo)致對(duì)象池中的對(duì)象數(shù)量一直上升,達(dá)到設(shè)置的上限以后再調(diào)用 borrowObject 就會(huì)永遠(yuǎn)等待或者拋出 java.util.NoSuchElementException: Timeout waiting for idle object 異常。

對(duì)于這種問題,一方面是從應(yīng)用實(shí)現(xiàn)上進(jìn)行排查,另一方面可以通過 GenericObjectPool 自帶的機(jī)制進(jìn)行清理。

設(shè)置自動(dòng)清理 設(shè)置拋棄時(shí)間

GenericObjectPool判斷一個(gè)對(duì)象是否泄漏是根據(jù)對(duì)象最后一次使用或者最后一次borrow的時(shí)間進(jìn)行判斷的,如果超出了預(yù)設(shè)的值就會(huì)被認(rèn)為是一個(gè)泄漏的對(duì)象被清理掉(PooledObjectFactory.destroyObject在這一過程中會(huì)被調(diào)用)。拋棄時(shí)間可以通過 AbandonedConfig.setRemoveAbandonedTimeout 進(jìn)行設(shè)置,時(shí)間單位是秒。

打開泄漏清理

設(shè)置了拋棄時(shí)間以后還需要打開泄漏清理才會(huì)生效。泄漏判斷的開啟可以通過兩種方式:

從對(duì)象池中獲取對(duì)象的時(shí)候進(jìn)行清理
如果當(dāng)前對(duì)象池中少于2個(gè)idle狀態(tài)的對(duì)象或者 active數(shù)量>最大對(duì)象數(shù)-3 的時(shí)候,在borrow對(duì)象的時(shí)候啟動(dòng)泄漏清理。通過 AbandonedConfig.setRemoveAbandonedOnBorrow 為 true 進(jìn)行開啟。

啟動(dòng)定時(shí)任務(wù)進(jìn)行清理
AbandonedConfig.setRemoveAbandonedOnMaintenance 設(shè)置為 true 以后,在維護(hù)任務(wù)運(yùn)行的時(shí)候會(huì)進(jìn)行泄漏對(duì)象的清理,可以通過 GenericObjectPool.setTimeBetweenEvictionRunsMillis 設(shè)置維護(hù)任務(wù)執(zhí)行的時(shí)間間隔。

GenericObjectPool pool = new GenericObjectPool(new MyPooledObjectFactory(),config);

AbandonedConfig abandonedConfig = new AbandonedConfig();

abandonedConfig.setRemoveAbandonedOnMaintenance(true); //在Maintenance的時(shí)候檢查是否有泄漏

abandonedConfig.setRemoveAbandonedOnBorrow(true); //borrow 的時(shí)候檢查泄漏

abandonedConfig.setRemoveAbandonedTimeout(10); //如果一個(gè)對(duì)象borrow之后10秒還沒有返還給pool,認(rèn)為是泄漏的對(duì)象

pool.setAbandonedConfig(abandonedConfig);

pool.setTimeBetweenEvictionRunsMillis(5000); //5秒運(yùn)行一次維護(hù)任務(wù)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/65133.html

相關(guān)文章

  • GenericObjectPool參數(shù)解析

    摘要:如果為負(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...

    huayeluoliuhen 評(píng)論0 收藏0
  • common-pool2 使用

    摘要:使用提供了中對(duì)象池管理方式,它們的使用方式基本一樣,這里以對(duì)象池為例介紹其使用方式,一般實(shí)現(xiàn)自己的對(duì)象池需要經(jīng)過個(gè)步驟實(shí)現(xiàn)接口該接口是一種工廠模式,實(shí)現(xiàn)其目的是讓對(duì)象池通過該工廠模式創(chuàng)建管理的對(duì)象創(chuàng)建對(duì)象池實(shí)例創(chuàng)建對(duì)象池我們假設(shè)對(duì)象是一 common-pool2 使用 common-pool2提供了3中對(duì)象池管理方式,它們的使用方式基本一樣,這里以GenericObjectPool對(duì)象...

    since1986 評(píng)論0 收藏0
  • common pool2

    摘要:?jiǎn)卫c對(duì)象池的區(qū)別首先單例和對(duì)象池的目的都是為了避免頻繁的創(chuàng)建對(duì)象帶來的系統(tǒng)的開銷。池借組與引用可以在內(nèi)存吃緊時(shí)被自動(dòng)回收來管理對(duì)象池中的對(duì)象,它可以隨著對(duì)對(duì)象的需要而不斷增加。 common-pool2 池技術(shù) 池技術(shù),主要用于管理對(duì)象,做到對(duì)象可以重用,避免多次創(chuàng)建對(duì)象的開銷,是一種比較常用的技術(shù)。比如DB數(shù)據(jù)源的連接池。 在Java中頻繁的創(chuàng)建對(duì)象和銷毀對(duì)象都會(huì)消耗性能。為了避免...

    jsyzchen 評(píng)論0 收藏0
  • JedisPool使用原理及源代碼

    摘要:,的使用連接池的配置信息說明一個(gè)可以有多少個(gè)實(shí)例最大最小獲得一個(gè)實(shí)例的時(shí)候是否檢查連接可用性一個(gè)實(shí)例給時(shí),是否檢查連接可用性狀態(tài)監(jiān)測(cè)用異步線程進(jìn)行檢查,一次最多的里的實(shí)例個(gè)數(shù) 1,JedisPool的使用 //WHEN_EXHAUSTED_FAIL = 0; ...

    newtrek 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<