我在测试一个程序运行效率,遇到如下问题:
大家可以测试一下代码,job1和job2分别在循环中计算0.299*x1的值,然后赋给x2
job1使用double作为数据类型,job2使用int,并且0.299*x进行了些优化,变成299*x/4096,4096可以向右移位12,所以变成了299*x/4096
这样来说应该job2的速度快了,可是结果却是这样的:159.367
job 1 running time:797 millsec
159
job 2 running time:687 millsec159.367
job 1 running time:469 millsec
159
job 2 running time:703 millsec159.367
job 1 running time:438 millsec
159
job 2 running time:671 millsec159.367
job 1 running time:454 millsec
159
job 2 running time:718 millsec
代码如下:
package performance;import java.util.Date;public class PerformanceCalculator {
private int intA;
private int intB;
private double doubleA;
private double doubleB;

public static void main(String[] args) {
PerformanceCalculator pc = new PerformanceCalculator();
while(true) {
pc.performanceCalculate();
}
}

public PerformanceCalculator() {
intA = 0;
intB = 533;
doubleA = 0;
doubleB = 533;
}

public void performanceCalculate() {
long startTime = new Date().getTime();

//job1
//put code here
startTime = new Date().getTime();
for(int i=0;i<10000;i++) {
for(int j=0;j<10000;j++) {
doubleA = 0.299*doubleB;
}
}
System.out.println(doubleA);
//end put code here

long endTime = new Date().getTime();
System.out.println("job 1 running time:"+(endTime-startTime)+" millsec");

//job2
//put code here
startTime = new Date().getTime();
for(int i=0;i<10000;i++) {
for(int j=0;j<10000;j++) {
intA = 1224*intB;
intA = intA>>12;
}
}
System.out.println(intA);
//end put code here

endTime = new Date().getTime();
System.out.println("job 2 running time:"+(endTime-startTime)+" millsec");
System.out.println();
}
}大家能帮我分析一下为什么吗?谢谢啦,BTW,我的CPU是CORE DUO 2 T5500,不知道会不会对结果有影响

解决方案 »

  1.   

    job1进行了一次操作: doubleA = 0.299*doubleB;
    job2进行了二次操作: intA = 1224*intB; intA = intA>>12;操作命令的次数多,相对时间也要多一些.还有有的就是进行这么多次循环,有可能进行到一半的时间,循环被挂起而不被执行,进入进程等待队列里,这个是不定因素,所以耗时也不确定,但总的来说,操作命令次数多了,时间相对就会较长一些.
      

  2.   

    既然用 Java 就不要太关心效率,不太慢就行了.
    Java 程序真正慢的地方是 一层一层的函数调用 还有 一层一层的异常处理
    计算的部分接近于C