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 的值?

解决方案 »

  1.   

    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)