什么是对象池:
将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成的开销。用于充当保存对象的“容器”的对象,被称为“对象池”(Object Pool,或简称Pool)
对象池的作用:
应用中要频繁创建某个对象,而对象的创建有很消耗性能,这时采用对象池策略可避免频繁创建对象,在一定程度上可提高系统的性能。
当我们的应用中创建一个十分最重量级的对象的时候,往往为了节省资源成本,使用单例模式,整个的应用中就只有一个对象供大家使用。这样是节省了不少资源,也是大多数应用的做法。不过如果遇到并发量十分大的情况下,并发访问的问题也就出现了。OK即使您不用加锁synchronized,利用ThreadLoacl进行安全变量的副本,但是维持变量副本的资源也是需要消耗资源的。而且对于一个重量级的对象的多个方法多个线程同时调用此对象的同一个局部变量,多个副本的维护实际上也是挺占用资源的。
什么时候不易使用对象池:
采用对象池化的本意,是要通过减少对象生成的次数,减少花在对象初始化上面的开销,从而提高整体的性能。然而池化处理本身也要付出代价,因此,并非任何情况下都适合采用对象池化。
Dr. Cliff Click在JavaOne 2003上发表的《Performance Myths Exposed》中,给出了一组其它条件都相同时,使用与不使用对象池化技术的实际性能的比较结果。他的实测结果表明:
对于类似Point这样的轻量级对象,进行池化处理后,性能反而下降,因此不宜池化;
对于类似Hashtable这样的中量级对象,进行池化处理后,性能基本不变,一般不必池化(池化会使代码变复杂,增大维护的难度);
对于类似JPanel这样的重量级对象,进行池化处理后,性能有所上升,可以考虑池化。
根据使用方法的不同,实际的情况可能与这一测量结果略有出入。在配置较高的机器和技术较强的虚拟机上,不宜池化的对象的范围可能会更大。不过,对于像网络和数据库连接这类重量级的对象来说,目前还是有池化的必要。
基本上,只在重复生成某种对象的操作成为影响性能的关键因素的时候,才适合进行对象池化。如果进行池化所能带来的性能提高并不重要的话,还是不采用对象池化技术,以保持代码的简明,而使用更好的硬件和更棒的虚拟机来提高性能为佳。
参考:http://www.cnblogs.com/yuelee/articles/2819870.html
http://www.cnblogs.com/shipengzhi/archive/2011/06/02/2068565.html
分享到:
相关推荐
为了解决这一问题,Apache Commons Pool项目提供了一种有效的解决方案——对象池化技术。通过复用已创建的对象而非每次请求都新建对象,可以显著提高应用程序的效率和响应速度。 #### 二、Apache Commons Pool简介 ...
Apache Commons Pool库正是提供了这种对象池服务,它为各种可池化对象提供了一种通用的框架。 DBCP则是基于commons-pool的数据库连接池实现。它提供了数据库连接的创建、管理和分配服务。在DBCP中,数据库连接被视...
在"commons-pool-1.3.jar"中,它实现了基本的Pool接口,提供了对象池的创建、管理和维护功能。 Apache Commons DBCP(Database Connection Pool)是基于Apache Commons Pool的数据库连接池组件。它提供了一个数据库...
commons-pool资源下载,东西齐全,包括api文档开发,Apache的对象池化工具commons-pool 当我们的应用中创建一个十分最重量级的对象的时候,往往为了节省资源成本,使用单例模式,整个的应用中就只有一个对象供大家...
Apache Commons Pool 是一个Java对象池库,主要用于提供各种对象池化的实现,以便高效地管理和复用有限的资源。标题中的"commo-pool, commons-pool commons-pool commons-pool"可能是由于输入错误,正确的应该是...
`commons-pool-1.5.6.jar` 提供了一套通用的对象池服务,DBCP利用它来管理数据库连接对象。对象池技术可以有效地复用对象,减少创建和销毁对象的开销。在DBCP中,Commons Pool主要负责以下任务: 1. **...
Redis 的Cluster集群搭建依赖的jar,优秀的开源对象池化组件apache-commons-pool2,它对对象池化操作进行了很好的封装,我们只需要根据自己的业务需求重写或实现部分接口即可,使用它可以快速的创建一个方便,简单,...
Apache Commons Pool2是一个Java对象池库,用于管理资源对象,如数据库连接或网络套接字。这个库的主要目的是提高性能和资源效率,通过重用已创建的对象而不是每次需要时都创建新的。在给定的场景中,`commons-pool2...
Apache Commons Pool是Apache软件基金会的一个项目,提供了一个对象池化的实现。对象池化是一种优化资源管理的技术,通过预先创建并维护一组对象,避免频繁地创建和销毁对象带来的性能开销。在`commons-pool-1.3.jar...
标题中的"commons-pool-1.6.jar.zip"表明这是一个包含Apache Commons Pool 1.6版本的压缩文件,其中的核心组件是`commons-pool-1.6.jar`。 **Apache Commons Pool 概述** Apache Commons Pool 是Apache软件基金会的...
Apache Commons Pool 是一个广泛使用的开源组件,主要用于提供对象池化的实现。在Java世界里,对象池化是一种优化资源管理的重要技术,通过复用已创建的对象,避免频繁的创建和销毁过程,从而提升系统性能。最新版本...
3. **Apache Commons Pool** (commons-pool-1.2.jar):这是Apache Commons的一个子项目,提供了通用的对象池服务。对象池化是一种设计模式,用于减少创建和销毁对象的开销,通过重用已创建的对象来提高性能。DBCP...
总结起来,Apache Commons Pool2是一个强大的工具,对于需要高效管理有限资源的应用程序,尤其是那些涉及到大量对象创建和销毁的情况,它是不可或缺的。通过对象池化,可以显著降低系统资源消耗,提高应用程序的运行...
这三者组合在一起,可能表示一个使用Struts 1.x作为Web框架,并且依赖Apache Commons DBCP进行数据库连接池管理,以及Apache Commons Pool进行通用对象池化的项目。然而,由于版本较旧,这些组件可能存在安全漏洞和...
这是Apache Commons项目的一个子项目,它提供了一个基于池化的数据库连接管理库。在使用JDBC时,数据库连接的创建和关闭是非常耗时的,DBCP通过维护一个连接池,可以复用已存在的数据库连接,从而提高应用程序的...
Apache Commons Pool 是一个通用的对象池服务,它是DBCP的基础,负责对象的创建、维护和复用。Pool 1.6 提供了基本的池化服务,可以为任何可池化的对象(如数据库连接)创建池。其核心功能包括: 1. 对象池的创建和...
这里提到的三个JAR文件——`commons-beanutils.jar`、`commons-collections-3.1.jar`和`commons-pool-1.2.jar`,都是Apache Commons项目的一部分,分别涉及Bean操作、集合操作和对象池化。 **1. `commons-beanutils...
`commons-pool-1.3.jar`包含PoolableObjectFactory、GenericObjectPool和PooledObject等关键类,它们负责对象的创建、维护和回收,确保池中对象的有效性和可用性。 在Tomcat服务器中,DataSource通常通过`server....
为了避免重新造轮子,我们可以使用优秀的开源对象池化组件apache-commons-pool2,它对对象池化操作进行了很好的封装,我们只需要根据自己的业务需求重写或实现部分接口即可,使用它可以快速的创建一个方便,简单,...
Apache Commons Pool 2是一个通用的对象池服务,它是Apache Commons组件的一部分。在Jedis中,它被用来实现对象池化,特别是Redis连接的池化。连接池允许应用程序重复使用已经创建的Redis连接,而不是每次需要时都...