对象的生命周期
Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除。因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3。其中T1表示对象的创建时间,T2表示对象的使用时间,而T3则表示其清除时间。由此,我们可以看出,只有T2是真正有效的时间,而T1、T3则是对象本身的开销。所以,避免和减少T1和T3的时间,能有效的提升程序的性能。
对象池
在EffectJava的第五条建议中,明确给出了“避免创建不必要的对象”这样的建议。对于可重复利用的对象,我们不应该频繁的创建销毁,而是应该反复利用。
重复利用对象,我们就需要建一个对象池,把所有可复用的对象都统一放到池中,同时对外提供obtain()
方法来获取对象。通常,我们利用静态对象数组来实现对象池。
对象池的初始化策略分为两种,一种是统一初始化,即在特定时机统一初始化池内所有对象,第一次使用的时候会有一定的开销。另一种是即时初始化,就是在使用中进行初始化,每次都会有一定的开销,直到池内充满。
高并发
在对象池创建好之后,我们就需要考虑如何分配、回收对象池的对象了。由于是路由系统的载体类,所以势必会有多线程进行访问,我们还要考虑到线程安全,以及并发性能。
关于线程安全,一般的做法是通过synchronized
关键字来进行线程同步。不过这么做的话,相当于是对ob