Java性能提供技巧:

03-09-15 banq
http://www.cs.utexas.edu/users/toktb/J-Breeze/javaperform.tips.html
              

banq
2003-09-15 21:58
该文提到,尽量使用Class.forName动态生成instance。

我经过测试发现,使用CLass.forName获取Class实例后,再使用class.newInstance产生实例,与直接使用New产生实例,速度几乎没有差别。以前我一直以为前者要慢于后者。

wjr
2003-09-17 16:53
>>使用CLass.forName获取Class实例后,再使用class.newInstance产生实例,与直接使用New产生实例,速度几乎没有差别。

就这事,我与许多人争论过,我也做过n多次测试验,还有java.lang.refect.Method.(sun声称在jdk1.4做了优化效率很高).我的测试结果是当new 5万个新对象时,Class.forName后newInstance()要慢4倍。在一个应用系统,生成新的5万个对象,是很平常的事。当然Cache了Class.forName();后,效果要好多,但离直接new 一个对象还有一定距离。还Method的反射机制,情况更差,性能比直接调用对象方法要差10倍。

我原来为了做更通用及可替换的系统,对这两个方法可以说是非常看重,但结果很是让我失望。

banq
2003-09-17 18:16
是这样,Jboss hibernate这些软件使用了专门字节包。

robbin
2003-09-17 18:54
>>我经过测试发现,使用CLass.forName获取Class实例后,再使用class.newInstance产生实例,与直接使用New产生实例,速度几乎没有差别。以前我一直以为前者要慢于后者。

第一次new某类的时候,两种方法不会有什么区别,因为主要的时间开销都花在了硬盘IO上,要去硬盘找到class文件,读入JVM,进行字节码验证。

Hibernate使用了cglib库,性能远胜JDK1.4的reflection.

猜你喜欢
2Go 1 2 下一页