Java中的运算性能问题

DCCC1234 2007-06-29 10:41:15
我在测试一个程序运行效率,遇到如下问题:
大家可以测试一下代码,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,不知道会不会对结果有影响
...全文
214 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
david2083 2007-06-30
  • 打赏
  • 举报
回复
既然用 Java 就不要太关心效率,不太慢就行了.
Java 程序真正慢的地方是 一层一层的函数调用 还有 一层一层的异常处理
计算的部分接近于C
Inhibitory 2007-06-30
  • 打赏
  • 举报
回复
job1进行了一次操作: doubleA = 0.299*doubleB;
job2进行了二次操作: intA = 1224*intB; intA = intA>>12;

操作命令的次数多,相对时间也要多一些.还有有的就是进行这么多次循环,有可能进行到一半的时间,循环被挂起而不被执行,进入进程等待队列里,这个是不定因素,所以耗时也不确定,但总的来说,操作命令次数多了,时间相对就会较长一些.
DCCC1234 2007-06-30
  • 打赏
  • 举报
回复
没有人知道吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧