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 为了能够正确释放对象,它必须监控每一个