一个奇怪现象

hongdu_dudua1 2017-03-11 04:16:46
ava code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

package test;

public class Test
{
public static void main(String[] args){
double d1 = 3.14d;
long t1 = System.currentTimeMillis();
for(int i=0; i<2000000000;i++){
d1 += 0.1f;
}
long t2 = System.currentTimeMillis();
long time = t2 - t1;
System.out.println(time);
System.out.println(d1);
}
}


原本是想写个小程序估算一下在我的电脑上进行20亿次浮点运算需要多长时间(这是当年的银河II巨型计算机的计算能力)

这段程序在我的电脑上运行的结果是
Plain Text code
?
1
2
3

D:\Temp>java test.Test
1791
1.9999999621907073E8


但是如果把最后一条打印语句注释,则结果成了
Plain Text code
?
1
2

D:\Temp>java test.Test
5


也就是说,最后一条打印语句会影响到前面的 t1、t2 的值?
...全文
160 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zs808 2017-03-13
  • 打赏
  • 举报
回复
JIT优化了没有被使用的局部变量以及其赋值语句,然后就成了:
package test;
 
public class Test 
{
    public static void main(String[] args){
        long t1 = System.currentTimeMillis();
        for(int i=0; i<2000000000;i++){
        }
        long t2 = System.currentTimeMillis();
        long time = t2 - t1;
        System.out.println(time);
    }
}
你可以试试,执行的结果是去掉d1一样。如果不一样的话,那就是JDK版本问题啦。(我测试用的是JDK1.7)
longwords 2017-03-12
  • 打赏
  • 举报
回复
这个问题我也很想知道,帮你顶上。

62,614

社区成员

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

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