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

利用Apache?Common將java對象池化的問題

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

什么是對象池化?

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

什么樣的對象需要池化?

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

對象池化的好處?

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

對象池化后需要注意什么?

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

使用apache-common-pool池化對象

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

可以直接實現(xiàn)org.apache.commons.pool2.PooledObjectFactory<T>接口實現(xiàn)創(chuàng)建、銷毀、鈍化、取消等接口,也可以使用他的抽象類,實現(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);
    }
}
  • 實現(xiàn)驅(qū)逐策略

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

public class FooEvictionPolicy implements EvictionPolicy<Foo> {
    @Override
    public boolean evict(EvictionConfig config, PooledObject<Foo> underTest, int idleCount) {
        // todo  定期檢查對象某些功能是否可用
        return true;
    }
}
  • 構(gòu)建&配置對象池
    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);
        // 設置拋棄策略
        AbandonedConfig abandonedConfig = new AbandonedConfig();
        abandonedConfig.setRemoveAbandonedOnMaintenance(true);
        abandonedConfig.setRemoveAbandonedOnBorrow(true);
        return new GenericObjectPool<>(new FooPoolObjectFactory(), poolConfig, abandonedConfig);
    }

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

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

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

相關文章

  • Linux下的mongodb服務監(jiān)視腳本(啟動服務)

    Linux下的mongodb服務監(jiān)視腳本(啟動服務)

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

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

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

    Linux中使用nfs共享存儲的方式

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

    apache密碼生成工具htpasswd使用詳解

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

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

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

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

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

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

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

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

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

    apache虛擬主機的配置指南

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

    linux編輯文件保存退出的實操講解

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

最新評論