深入浅出commoms-pool2对象池

深入浅出commoms-pool2对象池

apache-commoms-pool2 研究笔记。

  • 什么是对象池

  • apache-commoms-pool2主要结构

  • GenericObjectPool

  • GenericKeyedObjectPool

  • SoftReferenceObjectPool

  • ProxiedKeyedObjectPool和ProxiedObjectPool

  • 结束语

什么是对象池

高性能编程开发中有一项特别重要的技术,就是缓存技术。缓存技术几乎应用于方方面面,以提升程序的整体性能。而java的对象池就是缓存技术的一种。它对高并发环境下程序的性能提升有很大帮助。如我们所知的,一般的对象的创建耗时,在纳秒级的处理速度的cpu面前其实不值一提。但是,有一些复杂数据结构的大对象,比如数据库的链接对象,他的创建相对就比较耗费性能。如果频繁的创建此类对象,那么无论从时间还是空间角度,都是极大的浪费。于是乎,有了对象池这种专门来管理大对象的管理部门。大对象不在由其他人肆意的创建了,而是有对象池下属的工厂类来负责,再由对象池来提供出借。对象池主要提供出借,归还服务和对象的生命周期管理,保证有足够的对象能够被借出,同时不会有过多的空闲对象来白白浪费存储空间。

apache-commoms-pool2主要结构

包结构

代理模式的包

GenericObjectPool

这是最普通,最基础的一个对象池实现。适合最常见的,最普通的场景。我们尝试用httpclient对象来造一个连接池。这样我们可以提高使用httpclient的并发性能。首先需要定义一个工厂类,实现PooledObjectFactory然后看到里面的方法。主要的是创建makeObject和销毁destroyObject。validateObject方法用来验证对象是否有用。当我们向对象池借对象的时候,对象池会先调用validateObject验证对象是否有用。毕竟,它需要保证借出的对象都是有用的。activateObject激活对象,类似初始化方法。passivateObject钝化对象,意味着释放资源,反初始化。这两个方法看情况而定,不用空着也没事。

package commons.pool;

import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

/**<h1> HTTPClient工厂   </h1>
 * <p>
 * <b>描述:</b>
 *        为对象池创建,激活,释放,销毁对象等                <br>
 *                        
 * </p>                       
 * @author   萧影秋       
 * @version  1.0    2016年09月09日 星期五 上午 11点03分00秒
 */
public class HttpClientFactory implements PooledObjectFactory<HttpClient> {
   

    @Override
    public PooledObject<HttpClient> makeObject() 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值