2) 依赖语言的方法
为进行客观的分析,最好明确掌握各种运算的执行时间。这样一来,得到的结果可独立于当前使用的计算机--通过除以花在本地赋值上的时间,最后得到的就是"标准时间"。
运算示例标准时间
本地赋值i=n; 1.0
实例赋值this.i=n; 1.2
int增值i++; 1.5
byte增值b++; 2.0
short增值s++; 2.0
float增值f++; 2.0
double增值d++; 2.0
空循环while(true) n++; 2.0
三元表达式(x<0) ?-x : x 2.2
算术调用Math.abs(x); 2.5
数组赋值a[0] = n; 2.7
long增值l++; 3.5
方法调用funct(); 5.9
throw或catch异常try{ throw e; }或catch(e){} 320
同步方法调用synchMehod(); 570
新建对象new Object(); 980
新建数组new int[10]; 3100
通过自己的系统(如我的Pentium 200 Pro,Netscape 3及JDK 1.1.5),这些相对时间向大家揭示出:新建对象和数组会造成最沉重的开销,同步会造成比较沉重的开销,而一次不同步的方法调用会造成适度的开销。参考资源[5]和[6]为大家总结了测量用程序片的Web地址,可到自己的机器上运行它们。
1.常规修改
下面是加快Java程序关键部分执行速度的一些常规操作建议(注意对比修改前后的测试结果)。
将...修改成...理由
接口抽象类(只需一个父时)接口的多个继承会妨碍性能的优化
非本地或数组循环变量本地循环变量根据前表的耗时比较,一次实例整数赋值的时间是本地整数赋值时间的1.2倍,但数组赋值的时间是本地整数赋值的2.7倍
链接列表(固定尺寸)保存丢弃的链接项目,或将列表替换成一个循环数组(大致知道尺寸)每新建一个对象,都相当于本地赋值980次。参考"重复利用对象"(下一节)、Van Wyk[12] p.87以及Bentley[15] p.81
x/2(或2的任意次幂)X>>2(或2的任意次幂)使用更快的硬件指令
文章来源于领测软件测试网 https://www.ltesting.net/