对象池技术在服务器开发上应用广泛。在各种对象池的实现中,尤其以数据库的连接池最为明显,可以说是每个服务器必须实现的部分。本文是个人学习对象池的一个记录,以Apache的commons-pool实现为研究对象。在下一篇blog中,本人将继续研究Apache的common-dbcp,这是对象池技术在JDBC上的一个应用范例。
Apache对象池技术的实现上颇为简单,只有2个主要的对象:ObjectPool,用于管理对象池中所有的对象,以及对象的借出,和回收。PoolableObjectFactory,被ObjectPool生成,借出和回收的对象。之所以叫做Factory,只是是因为它导出了几个负责生命期管理的函数:makeObject,destoryObject,activeObject...。
ObjectPool维护一个列表,其中存放所有已经生成的对象。同时导出几个方法,如borrowObject,returnObject,addObject等等。当用户调用borrowObject时,ObjectPool查看当前列表中的空闲对象的数目,如果有空闲的对象,则初始化该对象后返回给用户,否则创建一个对象,返回给用户使用。同理,当用户调用returnObject时,ObjectPool查看当前队列中的空闲对象数目,如果数目小于DEFAULT_MAX_SLEEPING,则将改对象的状态清空,然后放到队列中,作为备用对象;否则直接销毁改对象。
这种备用的观念正是对象池的理论基础,可以很大程度上减少对象生成和销毁的次数。对于那些初始化过程很慢的对象来说,减少对象构造和销毁的次数就等于大幅度提高了整体效率。特别是对于数据库连接这样的对象,由于进行JNDI搜索的效率极为低下,应用对象池技术是理所当然的。
Apache的commons-pool使用起来非常简单,首先需要创建一个你认为有必要池化的对象,实现PoolableObejctFactory的几个方法。然后构造一种ObjectPool。Apache默认提供了3种ObjectPool:StackObjectPool,GenericObjectPool,SoftReferenceObejctPool,一般使用StackObejctPool就可以了。然后当需要创建对象时,使用StackObejctPool.borrowObejct;使用完对象后,调用StackObjectPool.returnObject,就完成了对象池的操作。
需要注意的是,对象池技术并不是对任何对象都适用。因为对象池本身的操作要耗费一些资源,对于一些小对象来说,使用对象池可能取得相反的效果。IBM DeveloperWorks上有一篇论文,指出简单对象如Point,Size等,使用对象池技术并不能带来性能的该改善;而复杂对象如JPanel,JFrame等,使用对象池后能带来稍微的性能优势;最最适合对象池技术的是一些耗时操作,如JDBC连接,线程等。
如果需要编译commons-pool,一般需要修改build.xml文件,因为commons-pool使用了其它两个java library: commons-collection和junit。其中junit只是编译测试代码才需要,如果不想编译测试代码,则可以不管junit,使用ant build.jar命令编译即可。commons-pool库的位置需要修改一下,在build.xml文件中,
<property name="commons-collections.jar" value="${basedir}/commons-collections-3.1.jar"/>
将value改为你的commons-collection库的存放位置即可。编译出来的library在dist/下。
如果对ObjectPool有兴趣,可以参考Apache的具体文档,或者浏览DeveloperWorks上的几篇精彩论文。本人是java新手,如果错误,欢迎指正,也欢迎鄙视。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=180539
分享到:
相关推荐
2. **对象和类**:易语言支持面向对象编程,通过类来定义对象,实现代码的复用和模块化。 3. **事件驱动编程**:易语言的程序设计常基于事件,比如用户点击按钮、窗口接收消息等,都会触发相应的事件处理函数。 4. *...
标题"行业资料-电子功用-全自动导电布成型转贴穿管设备及工艺的介绍分析.rar"表明这是一份关于电子行业中的特定应用——全自动导电布成型转贴穿管设备及其相关工艺的详细介绍。导电布是一种具有导电性能的材料,常...
由于现在流行的转贴工具都是基于浏览器的,转换速度比较慢,还得打开浏览器才能使用(同时受到浏览器版本限制)。 <br> 而这个小程序则完全不依赖于浏览器,以BFC采集器的UBB转换模块为基础,转换速度超快,...
【标题】"动网转贴.e.rar"是一个压缩文件,很可能包含了有关动网论坛或社区的相关资源、数据或用户帖子的备份。动网是中国早期知名的网络论坛软件之一,提供了丰富的社区功能,允许用户发帖、回帖、互动等。这个...
首先,让我们了解一下jQuery的核心概念。jQuery通过一种简洁的语法提供了对DOM(文档对象模型)的操作,如选择元素、添加样式、修改HTML内容等。例如,使用`$("#elementID")`可以选择ID为`elementID`的元素,`$("....
5. **技术标准与规范**:介绍相关行业的技术标准,如EMC(电磁兼容性)标准,以及安装导电泡棉转贴装置时应遵循的操作规范。 6. **维护与保养**:提供关于导电泡棉及转贴装置的日常维护、清洁、替换等方面的指导,...
"动网转贴"这个主题可能指的是在论坛或者社交网络中实现帖子转发或分享的功能。 动网转贴的源码可能涉及到以下几个方面的知识点: 1. **网络通信**:在实现动网转贴功能时,首先需要与服务器进行交互,发送用户的...
《动易系统的论坛转贴工具详解与应用》 在互联网信息交流日益频繁的今天,论坛作为用户互动的重要平台,其内容分享与传播的作用不容忽视。动易系统的论坛转贴工具,便是为了解决用户在论坛间便捷分享内容而设计的一...
去除Html中的干扰码等(样例中以轻之国度的干扰码为例) 配置文件语法: 方法类型(整数) 最大匹配长度(整数) 字符串1(删除开头) 字符串2(删除结尾) 方法类型: 1:删除单行 2:删除行与行之间的
东度极品论坛转贴工具东度极品论坛转贴工具
"易语言动网转贴"是指使用易语言编写的一段代码或程序,主要用于在动网上实现帖子的转换或者迁移。动网可能是一个论坛或社区平台,转贴功能则是将某个地方的帖子复制到另一个地方,保持其内容完整。 在这个源码中,...
### JavaScript 中对象的继承 #### 一、JavaScript 的 Apply 和 Call 函数 在 JavaScript 中,`apply` 和 `call` 是两个非常重要的函数,它们允许我们改变一个函数执行时的上下文(即 `this` 指向的对象)。这对于...
《易语言项目实例——动网转贴》 易语言,作为一种中文编程语言,以其独特的语法和易用性,深受广大编程爱好者尤其是初学者的喜爱。这个名为“动网转贴”的项目,是易语言编程实践中一个典型的例子,它为学习者提供...
本压缩包文件"行业分类-设备装置-FPC吸附胶纸转贴组件.zip"主要关注的是FPC在实际应用中的一个重要环节——FPC吸附胶纸转贴组件。这个组件在FPC的制造和组装过程中起到关键作用,确保FPC能够稳定地固定在设备上,并...
它是Apache软件基金会的一部分,广泛应用于开发基于SOAP(简单对象访问协议)的Web服务。本学习笔记将深入探讨Axis在Web服务开发中的应用,帮助初学者快速入门。 **一、Axis简介** Axis作为Java Web服务的实现,它...
转贴一个网络设计的例子
标题中的“动易系统的论坛转贴工具 -ASP源码.zip”揭示了这是一个基于ASP(Active Server Pages)编程语言开发的论坛转贴工具的源代码。ASP是微软公司推出的一种服务器端脚本环境,用于创建动态交互式网页。这个工具...
【标题】:“史上最全的转贴代码”通常指的是一个包含大量可复用代码片段或解决方案的集合,这些代码可能来自于各种编程语言,旨在帮助开发者快速解决问题或者作为学习参考。这样的资源对于初学者和经验丰富的程序员...