资讯专栏INFORMATION COLUMN

common pool2

jsyzchen / 729人阅读

摘要:单例与对象池的区别首先单例和对象池的目的都是为了避免频繁的创建对象带来的系统的开销。池借组与引用可以在内存吃紧时被自动回收来管理对象池中的对象,它可以随着对对象的需要而不断增加。

common-pool2 池技术

池技术,主要用于管理对象,做到对象可以重用,避免多次创建对象的开销,是一种比较常用的技术。比如DB数据源的连接池。

在Java中频繁的创建对象和销毁对象都会消耗性能。为了避免这种问题,我们常会用到池技术。我们肯定听说过一些术语,比如:线程池,连接池。Executor调度器会管理着一个线程池,使提交的task由线程池
中的空闲状态的线程去调度执行。我们创建数据库连接都会使用到连接池,像c3p0,这些都是我们经常接触到的池技术用到的地方。

单例与对象池的区别

首先单例和对象池的目的都是为了避免频繁的创建对象带来的系统的开销。单例是某个对象只希望在jvm中存在一个实例,当任何其它对象调用单例对象时不会因为其它对象正在使用这个单例对象而遭到阻塞,另外也不会同时出现多个对象需要更改单例对象的情况。换句话说,也就是说:

在单例对象上一般不会存在锁,竞争的资源。

单例对象是一种线程安全的对象

所以这样的对象,我们只希望创建一个就好。而对象池正好和单例的特性相反。

这里主要说下常用到的对象池管理组件common-pool2

common-pool2

对象池技术,主要用于管理对象,做到对象可以重用,避免多次创建对象的开销。

common-pool2是apache开源下的对象池管理组件,是目前Java项目中使用到最广的对象池管理组件

在实际项目中,会有很多地方,常用的tcp连接池,比如db,redis连接的组件都会使用到common-pool2作为连接池管理

common-pool2基本构思思想就是:利用一个集合来管理创建的对象,这个集合就称之为。当需要使用到对象时,从池中拿取一个空闲状态的对象,用完之后在放入到池中。另外可以让使用者个性化的配置池的策略,
比如池对象的大小,空闲对象大小,当池中对象都处于工作状态下对象池的增长策略,当去从对象池中拿取一个对象可以等待的时间等。

3种对象池管理方式

GenericObjectPool:可以设置池中最大的空闲个数,最大的对象实例化个数

GenericKeyedObjectPool:对于相同的key的对象池提供同样的池策略

SoftReferenceObjectPool:基于SoftReference实现,可以随着需要自动增加对象的个数,而对象的回收利用gc

GenericObjectPool

GenericObjectPool池利用LinkedBlockingDeque作为对象管理的容器和一个名为idle object eviction的驱逐线程定时查看空闲的对象,来保证空闲的对象不会超过用户的设置。

SoftReferenceObjectPool

SoftReferenceObjectPool池借组与SoftReference引用可以在内存吃紧时被gc自动回收来管理对象池中的对象,它可以随着对对象的需要而不断增加。与GenericObjectPool池比起来少了一个驱逐线程去回收空闲的对象和无用的对象。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64715.html

相关文章

  • common-pool2 使用

    摘要:使用提供了中对象池管理方式,它们的使用方式基本一样,这里以对象池为例介绍其使用方式,一般实现自己的对象池需要经过个步骤实现接口该接口是一种工厂模式,实现其目的是让对象池通过该工厂模式创建管理的对象创建对象池实例创建对象池我们假设对象是一 common-pool2 使用 common-pool2提供了3中对象池管理方式,它们的使用方式基本一样,这里以GenericObjectPool对象...

    since1986 评论0 收藏0
  • GenericObjectPool参数解析

    摘要:如果为负值,表示不运行检测线程。默认为策略的类名,默认为这里就用到了上面提到的两个参数对象池原理分析避免泄漏配置参数详解,以及资源回收,从池中获取资源,将资源返还给池逻辑解析 序 本文主要解析一下apache common pools下的GenericObjectPool的参数设置 GenericObjectPool commons-pool2-2.4.2-sources.jar!/o...

    huayeluoliuhen 评论0 收藏0
  • 聊聊GenericObjectPool的泄露检测

    摘要:序本文主要聊聊的参数。主要用来做连接池的泄露检测用。的状态一般是用于连接泄露的检测,检测的是在使用的对象,比如怀疑那个对象被占用时间超长,那估计是程序异常或导致对象了但忘记归还,或者对象之后使用时间太长。 序 本文主要聊聊GenericObjectPool的abandon参数。主要用来做连接池的泄露检测用。 object的状态 commons-pool2-2.4.2-sources.j...

    springDevBird 评论0 收藏0
  • 基于Swoole的通用连接池 - 数据库连接池

    摘要:连接池是一个基于的通用连接池,常被用作数据库连接池。依赖依赖版本安装通过安装。使用更多示例。 连接池 open-smf/connection-pool 是一个基于Swoole的通用连接池,常被用作数据库连接池。 依赖 依赖 版本 PHP >=7.0.0 Swoole >=4.2.9 Recommend 4.2.13+ 安装 通过Composer安装。 comp...

    superPershing 评论0 收藏0
  • 使用TensorFlow和TensorBoard从零开始构建卷积神经网络

    摘要:在本教程中,我会介绍如何只使用低级别的工具从零开始构建卷积神经网络,以及使用可视化我们的计算图和网络的表现。选择模型接下来,我必须决定使用哪个卷积神经网络的模型。实质上,大多数卷积神经网络都包含卷积和池化。 如果使用TensorFlow的所有较高级别的工具,例如tf.contrib.learn和Keras,你可以轻松地使用非常少量的代码来构建卷积神经网络。但是经常使用这些较高级别的应用,你就...

    ninefive 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<