欢迎来到天天文库
浏览记录
ID:39968930
大小:301.28 KB
页数:16页
时间:2019-07-16
《java对象池技术的原理及其实现x》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java对象池技术的原理及其实现何为对象池?对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存储某个实例数受限的类的实例,每一个实例还要加一个标记,标记该实例是否被占用。当类初始化的时候,这个对象池就被初始化了,实例就被创建出来。然后,用户可以向这个类索取实例,如果池中所有的实例都已经被占用了,那么抛出异常。用户用完以后,还要把实例“还”回来,即释放占用。为何使用对象池?当一个对象频繁使用时,会频繁的创建并会消耗系统很大的性能,对象池技术就能够解决这个问题.使用对象池的思路将用过的对象保存起来,等下一次需要这种对象的时候,再
2、拿出来重复使用,从而在一定程度上减少频繁创建对象所造成的开销。 并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。基本原理对象池技术基本原理的核心有两点:缓存和共享,即对于那些被频繁使用的对象,在使用完后,不立即将它们释放,而是将它们缓存起来,以供后续的应用程序重复使用,从而减少创建对象和释放对象的次数,进而改善应用程序的性能。事实上,由于对象池技术将对象限制在一定的
3、数量,也有效地减少了应用程序内存上的开销。实现一个对象池,一般会涉及到如下的类:1)对象池工厂(ObjectPoolFactory)类该类主要用于管理相同类型和设置的对象池(ObjectPool),它一般包含如下两个方法:·createPool:用于创建特定类型和设置的对象池;·destroyPool:用于释放指定的对象池; 同时为保证ObjectPoolFactory的单一实例,可以采用Singleton设计模式,见下述getInstance方法的实现:publicstaticObjectPoolFactorygetInstance(){if(p
4、oolFactory==null){poolFactory=newObjectPoolFactory();}returnpoolFactory;}2)参数对象(ParameterObject)类该类主要用于封装所创建对象池的一些属性参数,如池中可存放对象的数目的最大值(maxCount)、最小值(minCount)等。3)对象池(ObjectPool)类用于管理要被池化对象的借出和归还,并通知PoolableObjectFactory完成相应的工作。它一般包含如下两个方法:·getObject:用于从池中借出对象;·returnObject:将池化对象
5、返回到池中,并通知所有处于等待状态的线程;4)池化对象工厂(PoolableObjectFactory)类该类主要负责管理池化对象的生命周期,就简单来说,一般包括对象的创建及销毁。该类同ObjectPoolFactory一样,也可将其实现为单实例。一个简单构建对象池的例子publicclassObjectPool{privateintnumObjects=10;//对象池的大小privateintmaxObjects=50;//对象池最大的大小privateVectorobjects=null;//存放对象池中对象的向量(PooledObject类型)p
6、ublicObjectPool(){}/***创建一个对象池***/publicsynchronizedvoidcreatePool(){//确保对象池没有创建。如果创建了,保存对象的向量objects不会为空if(objects!=null){return;//如果己经创建,则返回}//创建保存对象的向量,初始时有0个元素objects=newVector();//根据numObjects中设置的值,循环创建指定数目的对象for(intx=0;x7、.size()8、;conn=getFreeObject();//重新再试,直到获得可用的对象,
7、.size()8、;conn=getFreeObject();//重新再试,直到获得可用的对象,
8、;conn=getFreeObject();//重新再试,直到获得可用的对象,
此文档下载收益归作者所有