欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Apache?Common將java對(duì)象池化的問題

 更新時(shí)間:2022年06月14日 09:39:44   作者:范閑  
對(duì)象被創(chuàng)建后,使用完畢不是立即銷毀回收對(duì)象,而是將對(duì)象放到一個(gè)容器保存起來,下次使用的時(shí)候不用創(chuàng)建對(duì)象,而是從容器中直接獲取,這篇文章主要介紹了利用Apache?Common將java對(duì)象“池化”,需要的朋友可以參考下

什么是對(duì)象池化?

對(duì)象被創(chuàng)建后,使用完畢不是立即銷毀回收對(duì)象,而是將對(duì)象放到一個(gè)容器保存起來,下次使用的時(shí)候不用創(chuàng)建對(duì)象,而是從容器中直接獲取。

什么樣的對(duì)象需要池化?

一般需要池化的對(duì)象往往都是比"重量級(jí)"較的對(duì)象,創(chuàng)建和銷毀都比較耗時(shí),比如我們的"線程","數(shù)據(jù)庫鏈接對(duì)象","tcp鏈接對(duì)象", "FTP鏈接對(duì)象" 等等。

對(duì)象池化的好處?

這些對(duì)象池化后,之后使用的時(shí)候不用創(chuàng)建,直接使用即可,可以大大縮短程序的運(yùn)行時(shí)間,以及創(chuàng)建對(duì)象時(shí)對(duì)CPU資源的消耗,以及對(duì)系統(tǒng)資源的控制(池化的對(duì)象數(shù)量有限,不會(huì)一直創(chuàng)建對(duì)象,導(dǎo)致系統(tǒng)資源耗盡,或者造成程序OOM的情況)進(jìn)而提高系統(tǒng)的穩(wěn)定性。

對(duì)象池化后需要注意什么?

這些被池化的對(duì)象都有一個(gè)特點(diǎn),都是"活的",比如數(shù)據(jù)庫鏈接對(duì)象內(nèi)部一般保存了一個(gè)TCP鏈接,所以,這個(gè)對(duì)象"能用"的前提是這個(gè)TCP鏈接是有效的,線程對(duì)象"能用"的前提是線程的狀態(tài)不是"凋亡"狀態(tài),所以我們有必要定期對(duì)對(duì)象的"健康狀態(tài)"進(jìn)行檢查,剔除掉"不能用"的對(duì)象,并填充新的對(duì)象給"對(duì)象池"。

使用apache-common-pool池化對(duì)象

  • 引入依賴
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.9.0</version>
        </dependency>
  • 需要池化的對(duì)象示例
public class Foo {
    private final String username;
    public Foo(String username) {
        this.username = username;
    }
    public String getUsername() {
        return username;
    }
}
  • 構(gòu)建對(duì)象創(chuàng)建工廠

可以直接實(shí)現(xiàn)org.apache.commons.pool2.PooledObjectFactory<T>接口實(shí)現(xiàn)創(chuàng)建、銷毀、鈍化、取消等接口,也可以使用他的抽象類,實(shí)現(xiàn)創(chuàng)建和包裝方法即可。

public class FooPoolObjectFactory extends BasePooledObjectFactory<Foo> {
    @Override
    public Foo create() throws Exception {
        return new Foo(String.valueOf(RandomUtils.randomInt(0, 10)));
    }
    @Override
    public PooledObject<Foo> wrap(Foo obj) {
        return new DefaultPooledObject<>(obj);
    }
}
  • 實(shí)現(xiàn)驅(qū)逐策略

一般數(shù)據(jù)庫鏈接對(duì)象,要定期進(jìn)行心跳,確保鏈接可用,如果鏈接斷開,需要銷毀對(duì)象,并重新創(chuàng)建新的對(duì)象。common-pool中,我們可以實(shí)現(xiàn)驅(qū)逐策略,對(duì)對(duì)象進(jìn)行定期檢查

public class FooEvictionPolicy implements EvictionPolicy<Foo> {
    @Override
    public boolean evict(EvictionConfig config, PooledObject<Foo> underTest, int idleCount) {
        // todo  定期檢查對(duì)象某些功能是否可用
        return true;
    }
}
  • 構(gòu)建&配置對(duì)象池
    public GenericObjectPool<Foo> fooGenericObjectPool() {
        GenericObjectPoolConfig<Foo> poolConfig = new GenericObjectPoolConfig<>();
        poolConfig.setEvictionPolicy(new FooEvictionPolicy());
        poolConfig.setBlockWhenExhausted(true);
        poolConfig.setJmxEnabled(false);
        poolConfig.setMaxWaitMillis(1000 * 10);
        poolConfig.setTimeBetweenEvictionRunsMillis(60 * 1000);
        poolConfig.setMinEvictableIdleTimeMillis(20 * 1000);
        poolConfig.setTestWhileIdle(true);
        poolConfig.setTestOnReturn(true);
        poolConfig.setTestOnBorrow(true);
        poolConfig.setMaxTotal(3);
        // 設(shè)置拋棄策略
        AbandonedConfig abandonedConfig = new AbandonedConfig();
        abandonedConfig.setRemoveAbandonedOnMaintenance(true);
        abandonedConfig.setRemoveAbandonedOnBorrow(true);
        return new GenericObjectPool<>(new FooPoolObjectFactory(), poolConfig, abandonedConfig);
    }

如果我們使用的是spring容器,一般我們需要將該對(duì)象交由spring管理。

  • 獲取&歸還對(duì)象
    private final GenericObjectPool<Foo> fooGenericObjectPool = fooGenericObjectPool();
    public Foo borrowFoo () throws Exception {
        return fooGenericObjectPool.borrowObject();
    }
    public void returnObject(Foo foo){
        fooGenericObjectPool.returnObject(foo);
    }

到此這篇關(guān)于利用Apache Common將java對(duì)象“池化”的文章就介紹到這了,更多相關(guān)Apache Common java對(duì)象池化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Linux下的mongodb服務(wù)監(jiān)視腳本(啟動(dòng)服務(wù))

    Linux下的mongodb服務(wù)監(jiān)視腳本(啟動(dòng)服務(wù))

    這篇文章主要介紹了Linux下的mongodb服務(wù)監(jiān)視腳本(啟動(dòng)服務(wù)),需要的朋友可以參考下
    2015-10-10
  • Linux磁盤空間占用率100%的排查方法

    Linux磁盤空間占用率100%的排查方法

    使用 Linux 操作系統(tǒng)時(shí),可能會(huì)遇到磁盤空間不足的錯(cuò)誤,這種錯(cuò)誤通常會(huì)導(dǎo)致系統(tǒng)運(yùn)行緩慢或崩潰,本文將介紹磁盤排查的方法,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • Linux中使用nfs共享存儲(chǔ)的方式

    Linux中使用nfs共享存儲(chǔ)的方式

    NFS是一種基于TCP/IP傳輸?shù)木W(wǎng)絡(luò)文件系統(tǒng)協(xié)議,通過使用NFS協(xié)議,客戶機(jī)可以像訪問本地目錄一樣訪問遠(yuǎn)程服務(wù)器中的共享資源,本文給大家介紹Linux中使用nfs共享存儲(chǔ)的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • apache密碼生成工具h(yuǎn)tpasswd使用詳解

    apache密碼生成工具h(yuǎn)tpasswd使用詳解

    本文主要介紹了1、 htpasswd的作用與安裝,2、 htpasswd命令詳解,3、 htpasswd的實(shí)例,4、 htpasswd的應(yīng)用,有需要的小伙伴參考下
    2015-01-01
  • Linux系統(tǒng)網(wǎng)卡設(shè)置教程

    Linux系統(tǒng)網(wǎng)卡設(shè)置教程

    這篇文章主要介紹了Linux系統(tǒng)網(wǎng)卡的設(shè)置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 在Linux上如何檢查用戶所屬組詳解

    在Linux上如何檢查用戶所屬組詳解

    這篇文章主要給大家介紹了關(guān)于在Linux上如何檢查用戶所屬組的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 淺談Linux下修改/設(shè)置環(huán)境變量JAVA_HOME的方法

    淺談Linux下修改/設(shè)置環(huán)境變量JAVA_HOME的方法

    這篇文章主要介紹了淺談Linux下修改/設(shè)置環(huán)境變量JAVA_HOME的方法,環(huán)境變量一般是指在操作系統(tǒng)中用來指定操作系統(tǒng)運(yùn)行環(huán)境的一些參數(shù)。環(huán)境變量是在操作系統(tǒng)中一個(gè)具有特定名字的對(duì)象,它包含了一個(gè)或者多個(gè)應(yīng)用程序所將使用到的信息。感興趣的可以了解一下
    2020-07-07
  • 圖解linux安裝tomcat(附常用命令)

    圖解linux安裝tomcat(附常用命令)

    這篇文章主要以圖片文字結(jié)合的方式為大家介紹了linux安裝tomcat,并linux操作tomcat一些常用命令,感興趣的小伙伴們可以參考一下
    2016-01-01
  • apache虛擬主機(jī)的配置指南

    apache虛擬主機(jī)的配置指南

    本文介紹了apache虛擬主機(jī)的配置的方法,要配置apache的虛擬主機(jī),我們需要分以下幾步進(jìn)行:檢查apache虛擬主機(jī)模塊,開啟apache虛擬主機(jī)功能,httpd-vhosts.conf文件詳解,根據(jù)IP配置虛擬主機(jī),根據(jù)端口配置虛擬主機(jī),根據(jù)域名配置虛擬主機(jī),有需要的小伙伴參考下
    2015-01-01
  • linux編輯文件保存退出的實(shí)操講解

    linux編輯文件保存退出的實(shí)操講解

    在本篇文章里小編給大家整理的是一篇關(guān)于linux編輯文件保存退出的實(shí)操講解內(nèi)容,需要的朋友們參考下。
    2020-02-02

最新評(píng)論