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,不知道会不会对结果有影响
------解决方案--------------------job1进行了一次操作: doubleA = 0.299*doubleB;
job2进行了二次操作: intA = 1224*intB; intA = intA> > 12;
操作命令的次数多,相对时间也要多一些.还有有的就是进行这么多次循环,有可能进行到一半的时间,循环被挂起而不被执行,进入进程等待队列里,这个是不定因素,所以耗时也不确定,但总的来说,操作命令次数多了,时间相对就会较长一些.
------解决方案--------------------既然用 Java 就不要太关心效率,不太慢就行了.
Java 程序真正慢的地方是 一层一层的函数调用 还有 一层一层的异常处理
计算的部分接近于C