- 浏览: 546248 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
wa114d:
楼主工作几年了,好厉害
一个面试官对面试问题的分析 -
wobuxiaole:
Good,非常好
30岁前男人需要完成的事 -
小逗逗:
Good,非常好
30岁前男人需要完成的事 -
invincibleLiu:
好帖,要顶!(别投我隐藏啊,这是对BBS最原始一种支持)
Java:synchronized修饰符在静态方法与非静态方法上的区别 -
fayedShih:
第三题,不知道对不对
import java.util.con ...
企业牛逼面试题目 高手进来讨论答题
Apache的commons-pool提供了编写对象池的API,将用完的对象返回对象池中以便于下次利用,从而减少了对象创建时间。这对于创建对象相对耗时的应用来说,能够提高应用的性能。
commons-dbcp数据库连接池正是使用commons-pool来创建和数据库之间的连接对象,在对象池中保存这些对象,从而减少了频繁建立连接对象所造成的性能损耗。本文讲述了commons-dbcp是怎样利用commons-pool来建立对象池的。
例如在tomcat中,利用JNDI来查找到资源javax.sql.DataSource的实现,如果使用dbcp连接池,则该实现为org.apache.commons.dbcp.BasicDataSource。我们可以从这个称为“数据源”的类中调用getConnection方法来获得与数据库的连接。但内部是如何实现的呢?对象池在其中占据什么位置呢?这一切对于外部使用者来说是透明的。
BasicDataSource的getConnection首先建立了PoolingDataSource对象来getConnection。这个PoolingDataSource对象中引用了ObjectPool,在getConnection()时,是从ObjectPool中借用了一个对象,既调用ObjectPool.borrowObject()方法。而对于熟悉commons-pool的程序员来说,ObjectPool肯定有与之对应的Factory创建对象,并放到池中。因此dbcp通过实现了接口org.apache.commons.pool.PoolableObjectFactory的类org.apache.commons.dbcp.PoolableConnectionFactory的makeObject方法来创建连接Connection对象。然而PoolableConnectionFactory持有对ConnectionFactory的引用,ConnectionFactory可以有3种策略来创建Connection对象。其中DriverConnectionFactory调用了数据库厂商提供的Driver来获得Connection。
最近在做一个内部测试工具类的优化工作中接触到了连接池, 对象池技术, 将原有的未使用连接池的数据库访问操作改成连接池方式.性能有了非常大的提升, 事实证明, 经过两次改造, 原来一个比较大的测试类需要500多秒, 第一次优化后只需要300多秒, 第二次改用连接池之后同一个测试类只需要80多秒.下面是改造过程中的一些总结.
对象池就是以"空间换时间"的一种常用缓存机制, 这里的"时间"特指创建时间,因此这也给出了对象池的适用范围:如果一种对象的创建过程非常耗时的话, 那么请使用对象池. 内部原理简单的说, 就是将创建的对象放到一个容器中, 用完之后不是销毁而是再放回该容器, 让其他的对象调用, 对象池中还涉及到一些高级的技术, 比如过期销毁, 被破坏时销毁, 对象数超过池大小销毁, 对象池中没有可用空闲对象时等待等等.
apache的common-pool工具库是对池化技术原理的一种具体实现. 在阐述原来之前, 这里先理解几个概念:
对象池(ObjectPool接口): 可以把它认为是一种容器, 它是用来装池对象的, 并且包含了用来创建池对象的工厂对象
池对象:就是要放到池容器中的对象, 理论上可以是任何对象.
对象池工厂(ObjectPoolFactory接口):用来创建对象池的工厂, 这个没什么好说的.
池对象工厂(PoolableObjectFactory接口):用来创建池对象, 将不用的池对象进行钝化(passivateObject), 对要使用的池对象进行激活(activeObject), 对池对象进行验证(validateObject), 对有问题的池对象进行销毁(destroyObject)等工作
对象池中封装了创建, 获取, 归还, 销毁池对象的职责, 当然这些工作都是通过池对象工厂来实施的, 容器内部还有一个或多个用来盛池对象的容器.对象池会对容器大小, 存放时间, 访问等待时间, 空闲时间等等进行一些控制, 因为可以根据需要来调整这些设置.
当需要拿一个池对象的时候, 就从容器中取出一个, 如果容器中没有的话, 而且又没有达到容器的最大限制, 那么就调用池对象工厂, 新建一个池对象, 并调用工厂的激活方法, 对创建的对象进行激活, 验证等一系列操作. 如果已经达到池容器的最大值, 而对象池中又经没有空闲的对象, 那么将会继续等待, 直到有新的空闲的对象被丢进来, 当然这个等待也是有限度的, 如果超出了这个限度, 对象池就会抛出异常.
"出来混, 总是要还的", 池对象也是如此, 当将用完的池对象归还到对象池中的时候, 对象池会调用池对象工厂对该池对象进行验证, 如果验证不通过则被认为是有问题的对象, 将会被销毁, 同样如果容器已经满了, 这个归还池对象将变的"无家可归", 也会被销毁, 如果不属于上面两种情况, 对象池就会调用工厂对象将其钝化并放入容器中. 在整个过程中, 激活, 检查, 钝化处理都不是必须的, 因此我们在实现PoolableObjectFactory接口的时候, 一般不作处理, 给空实现即可, 所以诞生了BasePoolableObjectFactory.
当然你也可以将要已有的对象创建好, 然后通过addObject放到对象池中去, 以备后用.
为了确保对对象池的访问都是线程安全的, 所有对容器的操作都必须放在synchronized
在apache的common-pool工具库中有5种对象池:GenericObjectPool和GenericKeyedObjectPool, SoftReferenceObjectPool, StackObjectPool, StackKeyedObjectPool.
五种对象池可分为两类, 一类是无key的:
另一类是有key的:
前面两种用CursorableLinkedList来做容器, SoftReferenceObjectPool用ArrayList做容器, 一次性创建所有池化对象, 并对容器中的对象进行了软引用(SoftReference)处理, 从而保证在内存充足的时候池对象不会轻易被jvm垃圾回收, 从而具有很强的缓存能力. 最后两种用Stack做容器. 不带key的对象池是对前面池技术原理的一种简单实现, 带key的相对复杂一些, 它会将池对象按照key来进行分类, 具有相同的key被划分到一组类别中, 因此有多少个key, 就会有多少个容器. 之所以需要带key的这种对象池, 是因为普通的对象池通过makeObject()方法创建的对象基本上都是一模一样的, 因为没法传递参数来对池对象进行定制. 因此四种池对象的区别主要体现在内部的容器的区别, Stack遵循"后进先出"的原则并能保证线程安全, CursorableLinkedList是一个内部用游标(cursor)来定位当前元素的双向链表, 是非线程安全的, 但是能满足对容器的并发修改.ArrayList是非线程安全的, 便利方便的容器.
使用对象池的一般步骤:创建一个池对象工厂, 将该工厂注入到对象池中, 当要取池对象, 调用borrowObject, 当要归还池对象时, 调用returnObject, 销毁池对象调用clear(), 如果要连池对象工厂也一起销毁, 则调用close().
下面是一些时序图:
borrowObject:
returnObject:
invalidateObject:
apache的连接池工具库common-dbcp是common-pool在数据库访问方面的一个具体应用.当对common-pool熟悉之后, 对common-dbcp就很好理解了. 它通过对已有的Connection, Statment对象包装成池对象PoolableConnection, PoolablePreparedStatement. 然后在这些池化的对象中, 持有一个对对象池的引用, 在关闭的时候, 不进行真正的关闭处理, 而是通过调用:
或:
而对应的对象池前者采用的是ObjectPool, 后者是KeyedObjectPool, 因为一个数据库只对应一个连接, 而执行操作的Statement却根据Sql的不同会分很多种. 因此需要根据sql语句的不同多次进行缓存
在对连接池的管理上, common-dbcp主要采用两种对象:
一个是PoolingDriver, 另一个是PoolingDataSource, 二者的区别是PoolingDriver是一个更底层的操作类, 它持有一个连接池映射列表, 一般针对在一个jvm中要连接多个数据库, 而后者相对简单一些. 内部只能持有一个连接池, 即一个数据源对应一个连接池.
下面是common-dbcp的结构关系:
下面是参考了common-dbcp的例子之后写的一个从连接池中获取连接的工具类
虽然对象池技术在实际开发过程中用的不是很多, 但是理解之后对我们写程序还是有莫大的好处的, 至少我是这样的
commons-dbcp数据库连接池正是使用commons-pool来创建和数据库之间的连接对象,在对象池中保存这些对象,从而减少了频繁建立连接对象所造成的性能损耗。本文讲述了commons-dbcp是怎样利用commons-pool来建立对象池的。
例如在tomcat中,利用JNDI来查找到资源javax.sql.DataSource的实现,如果使用dbcp连接池,则该实现为org.apache.commons.dbcp.BasicDataSource。我们可以从这个称为“数据源”的类中调用getConnection方法来获得与数据库的连接。但内部是如何实现的呢?对象池在其中占据什么位置呢?这一切对于外部使用者来说是透明的。
BasicDataSource的getConnection首先建立了PoolingDataSource对象来getConnection。这个PoolingDataSource对象中引用了ObjectPool,在getConnection()时,是从ObjectPool中借用了一个对象,既调用ObjectPool.borrowObject()方法。而对于熟悉commons-pool的程序员来说,ObjectPool肯定有与之对应的Factory创建对象,并放到池中。因此dbcp通过实现了接口org.apache.commons.pool.PoolableObjectFactory的类org.apache.commons.dbcp.PoolableConnectionFactory的makeObject方法来创建连接Connection对象。然而PoolableConnectionFactory持有对ConnectionFactory的引用,ConnectionFactory可以有3种策略来创建Connection对象。其中DriverConnectionFactory调用了数据库厂商提供的Driver来获得Connection。
最近在做一个内部测试工具类的优化工作中接触到了连接池, 对象池技术, 将原有的未使用连接池的数据库访问操作改成连接池方式.性能有了非常大的提升, 事实证明, 经过两次改造, 原来一个比较大的测试类需要500多秒, 第一次优化后只需要300多秒, 第二次改用连接池之后同一个测试类只需要80多秒.下面是改造过程中的一些总结.
对象池就是以"空间换时间"的一种常用缓存机制, 这里的"时间"特指创建时间,因此这也给出了对象池的适用范围:如果一种对象的创建过程非常耗时的话, 那么请使用对象池. 内部原理简单的说, 就是将创建的对象放到一个容器中, 用完之后不是销毁而是再放回该容器, 让其他的对象调用, 对象池中还涉及到一些高级的技术, 比如过期销毁, 被破坏时销毁, 对象数超过池大小销毁, 对象池中没有可用空闲对象时等待等等.
apache的common-pool工具库是对池化技术原理的一种具体实现. 在阐述原来之前, 这里先理解几个概念:
对象池(ObjectPool接口): 可以把它认为是一种容器, 它是用来装池对象的, 并且包含了用来创建池对象的工厂对象
池对象:就是要放到池容器中的对象, 理论上可以是任何对象.
对象池工厂(ObjectPoolFactory接口):用来创建对象池的工厂, 这个没什么好说的.
池对象工厂(PoolableObjectFactory接口):用来创建池对象, 将不用的池对象进行钝化(passivateObject), 对要使用的池对象进行激活(activeObject), 对池对象进行验证(validateObject), 对有问题的池对象进行销毁(destroyObject)等工作
对象池中封装了创建, 获取, 归还, 销毁池对象的职责, 当然这些工作都是通过池对象工厂来实施的, 容器内部还有一个或多个用来盛池对象的容器.对象池会对容器大小, 存放时间, 访问等待时间, 空闲时间等等进行一些控制, 因为可以根据需要来调整这些设置.
当需要拿一个池对象的时候, 就从容器中取出一个, 如果容器中没有的话, 而且又没有达到容器的最大限制, 那么就调用池对象工厂, 新建一个池对象, 并调用工厂的激活方法, 对创建的对象进行激活, 验证等一系列操作. 如果已经达到池容器的最大值, 而对象池中又经没有空闲的对象, 那么将会继续等待, 直到有新的空闲的对象被丢进来, 当然这个等待也是有限度的, 如果超出了这个限度, 对象池就会抛出异常.
"出来混, 总是要还的", 池对象也是如此, 当将用完的池对象归还到对象池中的时候, 对象池会调用池对象工厂对该池对象进行验证, 如果验证不通过则被认为是有问题的对象, 将会被销毁, 同样如果容器已经满了, 这个归还池对象将变的"无家可归", 也会被销毁, 如果不属于上面两种情况, 对象池就会调用工厂对象将其钝化并放入容器中. 在整个过程中, 激活, 检查, 钝化处理都不是必须的, 因此我们在实现PoolableObjectFactory接口的时候, 一般不作处理, 给空实现即可, 所以诞生了BasePoolableObjectFactory.
当然你也可以将要已有的对象创建好, 然后通过addObject放到对象池中去, 以备后用.
为了确保对对象池的访问都是线程安全的, 所有对容器的操作都必须放在synchronized
在apache的common-pool工具库中有5种对象池:GenericObjectPool和GenericKeyedObjectPool, SoftReferenceObjectPool, StackObjectPool, StackKeyedObjectPool.
五种对象池可分为两类, 一类是无key的:
另一类是有key的:
前面两种用CursorableLinkedList来做容器, SoftReferenceObjectPool用ArrayList做容器, 一次性创建所有池化对象, 并对容器中的对象进行了软引用(SoftReference)处理, 从而保证在内存充足的时候池对象不会轻易被jvm垃圾回收, 从而具有很强的缓存能力. 最后两种用Stack做容器. 不带key的对象池是对前面池技术原理的一种简单实现, 带key的相对复杂一些, 它会将池对象按照key来进行分类, 具有相同的key被划分到一组类别中, 因此有多少个key, 就会有多少个容器. 之所以需要带key的这种对象池, 是因为普通的对象池通过makeObject()方法创建的对象基本上都是一模一样的, 因为没法传递参数来对池对象进行定制. 因此四种池对象的区别主要体现在内部的容器的区别, Stack遵循"后进先出"的原则并能保证线程安全, CursorableLinkedList是一个内部用游标(cursor)来定位当前元素的双向链表, 是非线程安全的, 但是能满足对容器的并发修改.ArrayList是非线程安全的, 便利方便的容器.
使用对象池的一般步骤:创建一个池对象工厂, 将该工厂注入到对象池中, 当要取池对象, 调用borrowObject, 当要归还池对象时, 调用returnObject, 销毁池对象调用clear(), 如果要连池对象工厂也一起销毁, 则调用close().
下面是一些时序图:
borrowObject:
returnObject:
invalidateObject:
apache的连接池工具库common-dbcp是common-pool在数据库访问方面的一个具体应用.当对common-pool熟悉之后, 对common-dbcp就很好理解了. 它通过对已有的Connection, Statment对象包装成池对象PoolableConnection, PoolablePreparedStatement. 然后在这些池化的对象中, 持有一个对对象池的引用, 在关闭的时候, 不进行真正的关闭处理, 而是通过调用:
_pool.returnObject(this);
或:
_pool.returnObject(_key,this);这样一句, 将连接对象放回连接池中.
而对应的对象池前者采用的是ObjectPool, 后者是KeyedObjectPool, 因为一个数据库只对应一个连接, 而执行操作的Statement却根据Sql的不同会分很多种. 因此需要根据sql语句的不同多次进行缓存
在对连接池的管理上, common-dbcp主要采用两种对象:
一个是PoolingDriver, 另一个是PoolingDataSource, 二者的区别是PoolingDriver是一个更底层的操作类, 它持有一个连接池映射列表, 一般针对在一个jvm中要连接多个数据库, 而后者相对简单一些. 内部只能持有一个连接池, 即一个数据源对应一个连接池.
下面是common-dbcp的结构关系:
下面是参考了common-dbcp的例子之后写的一个从连接池中获取连接的工具类
/** * 创建连接 * * @since 2009-1-22 下午02:58:35 */ public class ConnectionUtils { // 一些common-dbcp内部定义的protocol private static final String POOL_DRIVER_KEY = "jdbc:apache:commons:dbcp:"; private static final String POLLING_DRIVER = "org.apache.commons.dbcp.PoolingDriver"; /** * 取得池化驱动器 * * @return * @throws ClassNotFoundException * @throws SQLException */ private static PoolingDriver getPoolDriver() throws ClassNotFoundException, SQLException { Class.forName(POLLING_DRIVER); return (PoolingDriver) DriverManager.getDriver(POOL_DRIVER_KEY); } /** * 销毁所有连接 * * @throws Exception */ public static void destory() throws Exception { PoolingDriver driver = getPoolDriver(); String[] names = driver.getPoolNames(); for (String name : names) { driver.getConnectionPool(name).close(); } } /** * 从连接池中获取数据库连接 */ public static Connection getConnection(TableMetaData table) throws Exception { String key = table.getConnectionKey(); PoolingDriver driver = getPoolDriver(); ObjectPool pool = null; // 这里找不到连接池会抛异常, 需要catch一下 try { pool = driver.getConnectionPool(key); } catch (Exception e) { } if (pool == null) { // 根据数据库类型构建连接工厂 ConnectionFactory connectionFactory = null; if (table.getDbAddr() != null && TableMetaData.DB_TYPE_MYSQL == table.getDbType()) { Class.forName(TableMetaData.MYSQL_DRIVER); connectionFactory = new DriverManagerConnectionFactory(table .getDBUrl(), null); } else { Class.forName(TableMetaData.ORACLE_DRIVER); connectionFactory = new DriverManagerConnectionFactory(table .getDBUrl(), table.getDbuser(), table.getDbpass()); } // 构造连接池 ObjectPool connectionPool = new GenericObjectPool(null); new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true); // 将连接池注册到driver中 driver.registerPool(key, connectionPool); } // 从连接池中拿一个连接 return DriverManager.getConnection(POOL_DRIVER_KEY + key); } }
虽然对象池技术在实际开发过程中用的不是很多, 但是理解之后对我们写程序还是有莫大的好处的, 至少我是这样的
发表评论
-
MySQL的sql查询语句优化
2017-02-24 13:51 576mysql中优化sql语句查询的30种方法: 1.对查询进行优 ... -
MySQL 优化索引 —— Using filesort
2012-01-06 11:00 3137用Explain分析SQL语句的时候,经常发现有的语句在Ext ... -
SQL 中having 和where的区别
2011-12-20 13:56 1262group by 在selec ... -
通过force index了解的MySQL查询的性能优化
2011-07-14 15:46 8558查询是数据库技术中最常用的操作。查询操作的过程比较简单,首先从 ... -
数据库索引优缺点
2011-07-06 22:01 979创建索引可以大大提高 ... -
如何用IN、LIMIT、CONCAT、DISTINCT等MySQL关键字
2011-06-14 11:11 2097记录一些select的技巧: 1、select语句可以用回车 ... -
MySQL复制表结构和数据的SQL语句
2011-03-31 10:53 34901. 复制表结构及数据到新表 ... -
简单sql语句整理
2011-03-31 10:34 1022-- 基本查询 select * from pet - ... -
SQL优化大全
2011-03-31 10:05 1114目录:概要 优化的理由 1. 大小写对SQL语句的影响(ORA ... -
mysql grant all privileges on
2011-03-28 16:34 2179遇到了 SQLException: access ... -
sql语句如何忽略大小写?
2011-02-21 10:36 3406那是自然查询不出来结果的,sql不区分大小写是针对语法来说的, ... -
公开一个Mysql如何获得新插入Id的代码
2010-12-02 10:57 1136原理: 在Mysql中同一个连接执行了insert语句 ... -
mysql show processlist命令 详解
2010-11-03 13:37 1498processlist命令的输出结果显示了有哪些线程在运行,可 ... -
论MySQL的监控和调优
2010-11-03 12:48 1514论MySQL的监控和调优 懂 ... -
mysql-性能,命令-explain,show processlist,show
2010-11-03 11:17 1638mysql-性能监控和调优 mysql-优化 sho ... -
MySQL全文搜索
2010-09-07 19:51 1008MySQL全文搜索,阅读MySQL全文搜索,全文索引在 MyS ... -
dbcp 学习笔记
2010-03-29 15:06 1899/* * Licensed to the Apache S ...
相关推荐
DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...
标题中的“最新commons-pool与commons-dbcp”指的是Apache Commons中的两个重要组件,它们主要用于数据库连接管理和资源池化。Apache Commons是Apache软件基金会提供的一系列Java实用工具库,其中DBCP(Database ...
《Apache Commons Pool与Commons DBCP在Struts框架中的应用》 Apache Commons是一个由Apache软件基金会维护的Java库集合,其中包括两个非常重要的组件:Commons Pool和Commons DBCP,它们在处理数据库连接池方面起...
《Apache Commons Pool与Commons DBCP:SSH组合中的关键组件》 Apache Commons是一个由Apache软件基金会维护的项目集合,提供了大量可重用的Java组件。在这些组件中,"commons-pool"和"commons-dbcp"是两个非常重要...
DBCP(DataBase Connection Pool)是 apache common上的一个 java 连接池项目,也是 tomcat 使用的连接池组件,依赖 于Jakarta commons-pool 对象池机制,DBCP可以直接的在应用程序中使用。 使用DBCP会用到commons-...
Apache Commons DBCP(Database Connection Pool)和Apache Commons Pool是两个在Java开发中广泛使用的开源库,主要用于数据库连接管理和对象池服务。这两个JAR文件,`commons-dbcp-1.4.jar` 和 `commons-pool-1.5.6...
Apache Commons Pool 是一个通用的对象池服务,它是DBCP的基础,负责对象的创建、维护和复用。Pool 1.6 提供了基本的池化服务,可以为任何可池化的对象(如数据库连接)创建池。其核心功能包括: 1. 对象池的创建和...
Apache Commons Pool是一个对象池设计模式的实现,它提供了一种在应用程序中高效管理和重用对象的方式。对象池的基本思想是预先创建一定数量的对象,当需要使用时,不再创建新的对象,而是从池中获取已经存在的对象...
首先,Apache Commons Pool 是一个通用的对象池实现,它提供了一个框架,用于管理和复用对象,以提高性能和减少资源消耗。对象池的概念是创建一组预先初始化的对象,当需要时可以从池中获取,而不是每次需要时都创建...
commons-dbcp-1.4 jar java连接池. .commons-dbcp 是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包:
Apache Commons Pool则是Apache Commons项目下的一套对象池API,它是DBCP的基础,用于创建和管理各种对象池,包括数据库连接。Pool 1.3版本提供了基本的对象池服务,包括对象的创建、分配、回收和销毁。它具有以下...
Apache Commons Pool是一个对象池设计模式的实现,主要用于管理资源,如数据库连接或其他昂贵的对象。在Java应用中,创建和销毁对象会消耗一定的系统资源,特别是在高并发环境下。对象池通过重用已创建的对象,避免...
这些文件是Apache Commons项目中的三个重要组件:Commons Collections、Commons DBCP(数据库连接池)和Commons Pool。Apache Commons是Java编程语言中一个非常重要的库集合,提供了大量实用工具类和算法,帮助...
3. **Apache Commons Pool** (commons-pool-1.2.jar):这是Apache Commons的一个子项目,提供了通用的对象池服务。对象池化是一种设计模式,用于减少创建和销毁对象的开销,通过重用已创建的对象来提高性能。DBCP...
接下来是`commons-pool.jar`,它是Apache Commons Pool项目的一部分,主要提供对象池服务。对象池设计模式是一种内存管理技术,通过重用已创建的对象,避免频繁地创建和销毁对象带来的性能开销。Apache Commons Pool...
`commons-pool-1.4.jar` 是Apache Commons项目中的对象池库,它是DBCP依赖的基础,用于创建和管理对象池,包括数据库连接池。DBCP利用了这个库的功能来管理其内部的数据库连接。Apache Commons Pool提供了基础框架...
Apache Commons Pool 是一个通用的对象池库,它提供了一种机制来管理和复用昂贵或创建/初始化耗时的对象。对象池设计的核心理念是减少创建和销毁对象的开销,通过预先创建一定数量的对象并保持在池中,供应用程序...
3. `commons-pool-1.6.jar`:Apache Commons Pool是通用的对象池服务,它是DBCP连接池依赖的基础。DBCP利用了Pool库来实现对象(这里是数据库连接)的池化管理,包括创建、分配、回收和销毁连接等操作。 使用DBCP...
Apache Commons Pool是对象池设计模式的实现,它提供了一种在多个应用之间共享昂贵资源的机制,比如数据库连接。对象池允许开发者创建一个对象池,而不是每次需要时都创建新对象,从而节省了内存和提高了性能。在...
赠送jar包:commons-pool2-2.10.0.jar; 赠送原API文档:commons-pool2-2.10.0-javadoc.jar; 赠送源代码:commons-pool2-2.10.0-sources.jar; 赠送Maven依赖信息文件:commons-pool2-2.10.0.pom; 包含翻译后的API...