网上的转帖很多,其中我任务较为确切的说明是:
http://www.ibm.com/developerworks/cn/java/l-common-pool/index.html
作者在文中写道:
恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率。
<!-- START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!-- END RESERVED FOR FUTURE USE INCLUDE FILES-->创建新的对象并初始化的操作,可能会消耗很多的时间。在这种对象的初始化工作包含了一些费时的操作(例如,从一台位于20,000千米以外
的主机上读出一些数据)的时候,尤其是这样。在需要大量生成这样的对象的时候,就可能会对性能造成一些不可忽略的影响。要缓解这个问题,
除了选用更好的硬件和更棒的虚拟机以外,适当地采用一些能够减少对象创建次数的编码技巧,也是一种有效的对策。对象池化技术(Object Pooling)就是这方面的著名技巧,而Jakarta Commons Pool组件则是处理对象池化的得力外援。
对象池化的基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成
的开销。用于充当保存对象的“容器”的对象,被称为“对象池”(Object Pool,或简称Pool)。
对于没有状态的对象(例如String),在重复使用之前,无需进行任何处理;对于有状态的对象(例如 StringBuffer),在重复使用之前,就需要
把它们恢复到等同于刚刚生成时的状态。由于条件的限制,恢复某个对象的状态的操作不可能实现了的话, 就得把这个对象抛弃,改用新创建的实
例了。
并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大
于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。
说道对象池,可能大家第一个想起的就是数据库连接池了.然而 ,我们在使用对象池技术的时候,仅仅只是为了提高性能么?依我看来,池化技术的主要
用途,还是对系统稀缺资源的保护(如数据库连接,IO存取,网络传输等).
也就是说,可以把对象池看成是系统稀缺资源的一个门,这个门可能有多把钥匙,请求只有拥有了钥匙,才能进去这道门.
也就是说: 池可以有效的限制应用对某项资源的访问,从而避免对资源的访问超出了资源本身的承受极限.