この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;
(キャリパー レポート 0.460543 ns) です。
しかし、一定の結果を返すメソッドを最適化することは実際のコードには役に立たないことに同意したとしても、ループの展開が依然として存在し、次のような問題につながる可能性があります。
static int slowItDown() {
int result = 0;
for (int i = 1; i <= 1000; i += 2) {
result += 2 * i + 1;
}
return result;
}
だから私の質問は残っています:なぜここで最適化が実行されないのですか?
1私が最初に書いたことに反して; そこにない何かを見たに違いない。