【发布时间】:2013-11-03 17:15:28
【问题描述】:
看看以下内容:
for (int j = 0 ; j < 5 ; j++) {
long t1 = System.currentTimeMillis();
for (int i = 0 ; i < 10000000 ; i++)
; // intentionally empty
long t2 = System.currentTimeMillis();
System.out.println (t2 - t1);
}
输出(多种可能之一):
2
11
0
0
0
如果你多次运行这个程序,你会发现输出的前两个数字总是非零,而所有其他数字确实是0。此外,第二个数字通常好像比第一个要高。即使我们循环更高,这似乎也成立,比如直到j < 100。 有什么具体的原因吗?当然,一般来说毫秒可能不会有太大的不同,但我只是好奇。
【问题讨论】:
-
JVM 意识到你在 for 循环中没有做任何有用的事情并优化它
-
@nhahtdh 它是在运行时实现的?
-
不确定这种情况,但它能够这样做,至少对于 switch case 语句。但很明显,对于这种情况,循环在某些时候被优化了。
-
也许这是一个提示:stackoverflow.com/a/12061905/1012381