对象池技术

栏目: Java · 发布时间: 6年前

内容简介:当对象的创建比较昂贵的时候,且生命周期通常较短的时候,将对象池化是一个比较不错的选择。对象池给对象提供了一个缓存。可能业务代码中用到的地方并不是很多,对象池的一个比较不错的应用点是RPC框架中的序列化部分,很多序列化框架自带了对象池,比如KryoPool。改造现有代码使用对象池并不复杂,无非就是选择一个对象池框架,然后修改对象的获取和释放。

当对象的创建比较昂贵的时候,且生命周期通常较短的时候,将对象池化是一个比较不错的选择。对象池给对象提供了一个缓存。

可能业务代码中用到的地方并不是很多,对象池的一个比较不错的应用点是RPC框架中的序列化部分,很多序列化框架自带了对象池,比如KryoPool。

改造现有代码使用对象池并不复杂,无非就是选择一个对象池框架,然后修改对象的获取和释放。

比较常见的对象池库肯定是apache-common-pool了,它提供了数种不同类型和实现的池,大部分时候直接用它就行了。

一个简单的例子

public class ReaderUtil {
    
    private ObjectPool<StringBuffer> pool;
    
    public ReaderUtil(ObjectPool<StringBuffer> pool) {
        this.pool = pool;
    }
 
    /**
     * Dumps the contents of the {@link Reader} to a String, closing the {@link Reader} when done.
     */
    public String readToString(Reader in)
        throws IOException {
        StringBuffer buf = null;
        try {
            buf = pool.borrowObject();
            for (int c = in.read(); c != -1; c = in.read()) {
                buf.append((char) c);
            }
            return buf.toString();
        } catch (IOException e) {
            throw e;
        } catch (Exception e) {
            throw new RuntimeException("Unable to borrow buffer from pool" + e.toString());
        } finally {
            try {
                in.close();
            } catch (Exception e) {
                // ignored
            }
            try {
                if (null != buf) {
                    pool.returnObject(buf);
                }
            } catch (Exception e) {
                // ignored
            }
        }
    }
}

可以看出使用对象池的关键就是将对象重置这个行为交给对象池处理。池的使用可能有多线程竞争问题,不过大部分库都能够处理这个问题。

当然一般考虑到对象池了自然是有性能上的需求,这里有一些小众的对象池

https://github.com/DanielYWoo/fast-object-pool

https://github.com/chrisvest/stormpot/

https://github.com/vibur/vibur-object-pool

还有一些是其他项目中的对象池,比如使用数据库连接池中的对象池(https://github.com/brettwooldridge/HikariCP)

参考

https://commons.apache.org/proper/commons-pool/

https://commons.apache.org/proper/commons-pool/apidocs/org/apache/commons/pool2/impl/GenericObjectPool.html


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JSP信息系统开发实例精选

JSP信息系统开发实例精选

赛奎春 / 机械工业出版社 / 2006-1 / 44.00元

本书精选了大学生就业求职网、物流短信平台、化奥汽车销售集团网站、佳美网络购物中心、科研成果申报管理系统、安瑞奥国际商务不院招生网、明日宽带影院、雄霸天下游戏网等8个综合的网络信息系统工程作为案例,深入剖析了实际的网络信息系统的开发思路、方法和技巧。帮助读者透彻掌握JSP开发网络信息系统的方法和步骤,从而设计出具有实用价值和商用价值的信息系统。   本书产例具有很强的实用性和工程实践性,在讲解......一起来看看 《JSP信息系统开发实例精选》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器