此Java 方法用于模拟慢速计算的基准测试:
static int slowItDown() {
int result = 0;
for (int i = 1; i <= 1000; i++) {
result += i;
}
return result;
}
恕我直言,这是一个非常糟糕的主意,因为它的身体可以被return 500500
. 这似乎永远不会发生1 ; 正如 Jon Skeet 所说,可能是因为这种优化与真实代码无关。
有趣的是,一个稍微简单的方法result += 1;
得到了完全优化(caliper 报告 0.460543 ns)。
但是即使我们同意优化返回常量结果的方法对实际代码没有用处,仍然存在循环展开,这可能导致类似
static int slowItDown() {
int result = 0;
for (int i = 1; i <= 1000; i += 2) {
result += 2 * i + 1;
}
return result;
}
所以我的问题仍然存在:为什么这里没有进行优化?
1与我最初写的相反;我一定看到了什么不存在的东西。