Dir*_*nry 10 java macos jvm runtime compiler-optimization
考虑以下java代码:
public int main() {
int i = 1111;
for (; rules(i) != true && i < Integer.MAX_VALUE; i++) {
//LOG.debug("Testing i: " + i);
}
System.out.println("The mystery number is: " + i);
return i;
}
protected boolean rules(int nb) {
//...
}
Run Code Online (Sandbox Code Playgroud)
我发现即使for循环延续评估是true,循环将在其主体为空时停止执行.
最终结果main是错误的(i16698约98%的时间,有时高一点/更低).
如果我从循环体中取消注释LOG语句,循环将继续运行,直到循环连续评估为止false.
我正在使用的JVM是MacOS X VM 1.6.0.
ps:完整的代码源+单元测试可在此处获取:https://gist.github.com/dirtyhenry/5804130
更新:
更新2:
java -version
Run Code Online (Sandbox Code Playgroud)
收益:
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-456-11M4508)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-456, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我见过一些关于 SO 循环优化的参考资料,仅在超过 10000 次迭代后才会发生。也许这就是为什么“神奇数字”通常在 16000 左右的原因?
这里有一个很好的讨论
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |