Java中的运算性能问题
我在测试一个程序运行效率,遇到如下问题:
大家可以测试一下代码,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 millsec
159.367
job 1 running time:469 millsec
159
job 2 running time:703 millsec
159.367
job 1 running time:438 millsec
159
job 2 running time:671 millsec
159.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,不知道会不会对结果有影响