Java对象池技术的原理及其实现[Java编程]
本文“Java对象池技术的原理及其实现[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
择要
本文在解析对象池技术基本原理的底子上,给出了对象池技术的两种实现方法.还指出了利用对象池技术时所应注意的问题.
关键词 对象池;对象池技术;Java 对象;性能
Java对象的生命周期解析
Java对象的生命周期大致包含三个阶段:对象的成立,对象的利用,对象的排除.因此,对象的生命周期长度可用以下的表达式表示:T = T1 + T2 +T3.此中T1表示对象的成立时间,T2表示对象的利用时间,而T3则表示其排除时间.由此,我们可以看出,只有T2是真正有效的时间,而T1、T3则是对象本身的开销.下面再看看T1、T3在对象的整个生命周期中所占的比例.
我们知道,Java对象是通过构造函数来成立的,在这一历程中,该构造函数链中的全部构造函数也城市被自动调用.别的,默许情形下,调用类的构造函数时,Java会把变量初始化成肯定的值:全部的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成0.0,逻辑值设置成false.所以用new关键字来新建一个对象的时间开销是很大的,如表1所示.
表1 一些操作所耗费时间的对比表
运算操作 | 示例 | 尺度化时间 |
本地赋值 | i = n | 1.0 |
实例赋值 | this.i = n | 1.2 |
办法调用 | Funct() | 5.9 |
新建对象 | New Object() | 980 |
新建数组 | New int[10] | 3100 |
从表1可以看出,新建一个对象需求980个单位的时间,是本地赋值时间的980倍,是办法调用时间的166倍,而若新建一个数组所耗费的时间就更多了.
再看排除对象的历程.我们知道,Java语言的一个上风,就是Java程序员勿需再像C/C++程序员那样,显式地释放对象,而由称为垃圾汇集器(Garbage Collector)的自动内存管理系统,按时或在内存凸现出不足时,自动回收垃圾对象所占的内存.凡事有利总也有弊,这固然为Java程序计划者供应了极大的便利,但同时它也带来了较大的性能开销.这种开销包含两方面,首先是对象管理开销,GC为了可以精确释放对象,它必须监控每一个对象的运行状况,包含对象的申请、引用、被引用、赋值等.其次,在GC开始回收“垃圾”对象时,系统会暂停利用程序的履行,而单独占用CPU.
因此,假如要改进利用程序的性能,一方面应尽大概削减成立新对象的次数;同时,还应尽大概削减T1、T3的时间,而这些都可以通过对象池技术来实现.
对象池技术的基本原理
对象池技术基本原理的核心有两点:缓存和同享,即关于那些被频繁利用的对象,在利用完后,不立行将它们释放,而是将它们缓存起来,以供后续的利用程序反复利用,从而削减成立对象和释放对象的次数,进而改进利用程序的性能.事实上,由于对象池技术将对象限制在一定的数目,也有效地削减了利用程序内存上的开销.
实现一个对象池,普通会触及到以下的类:
1)对象池工厂(ObjectPoolFactory)类
该类主要用于管理相同范例和设置的对象池(ObjectPool),它普通包含以下两个办法:
·createPool:用于成立特定范例和设置的对象池;
·destroyPool:用于释放指定的对象池;
同时为保证ObjectPoolFactory的单一实例,可以采取Singleton计划情势,见下述getInstance办法的实现:
public static ObjectPoolFactory getInstance() {
if (poolFactory == null) {
poolFactory = new ObjectPoolFactory();
}
return poolFactory;
}
2)参数对象(ParameterObject)类
该类主要用于封装所成立对象池的一些属性参数,如池中可存放对象的数目的最大值(maxCount)、最小值(minCount)等.
3)对象池(ObjectPool)类
用于管理要被池化对象的借出和偿还,并告诉PoolableObjectFactory完成呼应的工作.它普通包含以下两个办法:
·getObject:用于从池中借出对象;
·returnObject:将池化对象返回到池中,并告诉全部处于等候状况的线程;
4)池化对象工厂(PoolableObjectFactory)类
该类主要负责管理池化对象的生命周期,就简单来说,普通包含对象的成立及销毁.该类同ObjectPoolFactory一样,也可将其实现为单实例.
以上是“Java对象池技术的原理及其实现[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |