Java池技术.doc_第1页
Java池技术.doc_第2页
Java池技术.doc_第3页
Java池技术.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

池技术1 首先要说的是Java 的garbage collector(垃圾回收) 机制、虽然为开发者带来了方便、但同时也带来了较大性能的开销。2 这种开销有2个方面:第一、对象管理、程序为了正确的释放对象,就必须监控每个对象的运行状态,包括,申请、引用、赋值、等操作。第二、在GC 回收对象时,系统会暂停引用程序的执行,而独占CPU 。3 从Java 的对象生命周期来讲、创建,使用,清除。中 创建所消耗的 资源 是使用的 几百倍 、因此,要改善 应用程序的性能,一方面就是要尽量减少创建对象的次数;同时,还应尽量减少 创建 和 清除的时间、这些都可以用池技术来实现。4 对象池技术的基本原理核心有2点:缓存和共享。就是对于那些频繁使用的对象,在使用完后,不立即释放他们,而是将他们缓存起来,以供后续的应用程序使用,从而减少创建和清除的次数,最好在限制对象的上限,可以更好的改善程序的性能。 5. 实现一个对象池,一般后用到如下几个类。1)、对象池工厂(ObjectPoolFactory)类该类主要用于 管理 相同对象和设置对象池(ObjectPiool),它一般包含2个方法:createPool:用于创建特定类型和设置的对象池。destroyPool: 用于释放指定的对象池。为了保证 ObjectPoolFactory 的单一实例,可采用 singleton 的是设计模式。Public static ObjectPoolFactory getInstance()If(poolFactory=null)poolFactory = new ObjectPoolFactory();Return poolFactory;2). 参数对象(ParameterObject)类;该类就设置 池的 属性 如:maxCount 和 minCount.3). 对象池(ObjectPool)用于管理被池化的对象 并通知PoolableObjectFactory 完成相应的工作。一般包含2个方法:getObject:用于从池中借出对象。returnObject : 用于归还对象。4). 池化对象工厂(PoolableObjectFactory)类。主要负责管理池化对象的生命周期,也包含 creatObject 方法。Public object createObject(class classType)Return new Object(classType);就简单的来说,一般包括对象的创建和销毁。该类和ObjectPoolFactory 一样,采用 singleton 模式。Public static PoolableObjectFactory getInstance()If(objFactory=null)objFactory=new PoolableObjectFactory();Return objFactory;通用对象池的实现对象池的构造和管理可以按照多种方式实现。最灵活的方式是将池化对象的类(Class)型在对象池外指定,即在ObjectPoolFactory类创建对象时动态的指定对象池的所池化的对象类型,实现代码如下:Public ObjectPool createPool(parameterObject parObj,Class classtype)Return new ObjectPool(parObj,classtype);其中 perObj 指定对象池的特征属性,classType 指定对象池中所存放对象的类型。对象池创建后就是管理对象了,实现如下:public class ObjectPoolprivate ParameterObject parObj;/池对象自己的属性private Class classType;/池中所存放对象的类型private int currentNum=0;/池中现在有的对象private Object currentObject;/池中可以借出的对象private Vector pool;/用于存放对象的池public ObjectPool(PramenterObject parObj,Class classType)this.parObj=parObj;this.classType=classType;pool=new Vector();public Object getObject()if(pool.size()=parObj.getMaxCount()if(currentNum=parObj.getMaxCount()/如果池中对象太少 就用poolableObjectFactory 创建一个对象。 poolableObjectFactory objFactory=poolableObjectFactory.getInstance ();currentObject = objFactory.createObject();currentNum+; else/如果没有对象可用 就只有等线程回收。Synchronized(this)Try Wait();catch(InterruptedException e)e.printstatckTrace();currentObj=pool.firstElement(); else/如果池中有可用的对象就直接用currentObj=pool.firstElement();Return currentObj;Public void retutnObject(Objectobj)If(obj.isInstance(classType)Pool.addObject(obj);Synchronized(this)notifyAll();elseThrow new IllegalArgumentException(“对象不能放进连接池”);从上述代码可以看出、objectpool 利用 Java.util.Vector 作为可扩张的连接池,并通过它的构造函数来指定池中的属性和对象的类型。当有对象返回池中时,它将检查对象是否正确。当池中不再有对象可用时,它或者等待线程回收或者在新建一个对象实例。不过,新的对象创建并不在 objectpool 中,而是由 PoolableObjectFactory 类 的 createObject 完成:public Object createObject(Class classType)Object obj=null;tryobj=new Object();catch(Exception e)e.printStackTrace();return obj;这样 通用池就写好了,在客户端(Client)怎么实现,假设 池的对想 是 StringBuffer:/创建池化工厂ObjectPoolFactory poolFactory = ObjectPoolFactory.getInstance();/定义所创建对象池的属性parameterObject paraObj=new parameterObject(2.1);/利用池化工厂,创建一个存放 Stringbuffer 对象的 连接池objectPool pool = poolFactory.createPool(paraObj,String buffer.class);/从池中取出 stringbuffer 对象StringBuffer stringbuffer=(StringBuffer)pool.getObject();/使用从池中取出的对象Stringbuffer.append(“hello”);Sysrem.out.println(stringbuffer.toString(); 很遗憾的是 这里面要使用 cast 操作,还有 Java.util.Vector 类的同步操作。使得使用有线。这个时候如果把 cast 的操作去除就可以大大增加效率:这就有了专用池。即不要 ObjectPooFfactoey(对象池化工厂) 和 PoolableObjectFactory(池化对象工厂)。而将他们直接融合到 ObjectPool类。假设 池的对象 还是 StringBuffer。public class ObjectPoolprivate parameterObject paraObj;/池的属性private int currentNum=0;/创建对象个数private StringBuffter currentObj;/对象类型private Vector pool;/池public ObjectPool(parameterObject paraObj)this.paraObj=paraObj;pool=new pool();Public StringBuffer getObject()If(poll.size()paraObj.getMax()If(currentNumparaObj.getMax)/当前对象数量小于 池的 最大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论