缓存(Cache)()
在这个方法拦截器中实现了对缓存的操作它首先查询系统是否已经计算并缓存了所请求的数字如果没有则进行计算并将结果保存在缓存中如果有则直接从缓存中取得结果在使用动态代理时可以通过下面的代码生成动态代理对象包含上述缓存逻辑
public static HeavyMethodDemo newCacheHeavyMethod(){//生成带有缓存功能的类
Enhancer enhancer = new Enhancer()
enhancersetSuperclass(HeavyMethodDemoclass)
enhancersetCallback(new CglibHeavyMethodInterceptor())//设置缓存逻辑
HeavyMethodDemo cglibProxy = (HeavyMethodDemo) enhancercreate()
return cglibProxy;
}
以上代码首先生成一个HeavyMethodDemo类的子类并使用CglibHeavyMethodInterceptor作为它的方法拦截器最后生成动态类的对象这个对象是HeavyMethodDemo的动态子类的实例
以下代码只是简单地生成了HeavyMethodDemo类下文将对newHeavyMethod()和newCacheHeavyMethod()生成的对象进行简单的性能测试
public static HeavyMethodDemo newHeavyMethod(){ //不带有缓存功能
return new HeavyMethodDemo()
}
一段测试代码如下它分别使用代理类对象和HeavyMethodDemo对象对一个大整数进行因式分解运算在笔者的计算机上使用动态代理的缓存对象相对耗时ms而HeavyMethodDemo相对耗时ms
public static void main(String args[]){
HeavyMethodDemo m=newCacheHeavyMethod() //使用缓存
long begin = SystemcurrentTimeMillis()
for(int i=;i<;i++) //使用缓存时只需要计算一次
mheavyMethod()
Systemoutprintln(cache method spend:+(SystemcurrentTimeMillis()
begin))
m=newHeavyMethod() //不使用缓存
begin = SystemcurrentTimeMillis()
for(int i=;i<;i++) //不使用缓存时每次都要计算
mheavyMethod()
Systemoutprintln(no cache method spend:+(SystemcurrentTimeMillis()
begin))
}
返回目录Java程序性能优化让你的Java程序更快更稳定
编辑推荐
Java程序设计培训视频教程
JEE高级框架实战培训视频教程
JME移动开发实战教学视频
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLEG数据库开发优化指南