为什么跳过for循环?

时间:2019-12-19 07:33:50

标签: java jvm

long start = System.currentTimeMillis();
long m = 0;
System.out.println("Going into the loop");

for (int i = 0; i < 10000000; i++) {
    for (int j = 0; j < 1000; j++) {
        if (i % 2 == 0 && j % 3 == 0) {
            m = i + j;
        }
    }
}

System.out.println("Out of the loop");

long end = System.currentTimeMillis();
System.out.println("Time : " + (end - start));
System.out.println("m : " + m);

当我运行以上代码时,“ m”值评估为10000997,运行时间为13321。

Going into the loop
Out of the loop
Time : 13321
m : 10000997

但是,当我评论最后一个显示“ m”值的S.O.P语句时,运行时间大约为7。

Going into the loop
Out of the loop
Time : 7

那为什么会发生呢?是否跳过了for循环?

1 个答案:

答案 0 :(得分:7)

编译器优化您的代码,并意识到变量m实际上是一个可以删除的死存储。然后,它意识到if根本不执行任何操作(在m被删除之后),并且也将其删除。内环和外环也是如此。