5

この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私が最初に書いたことに反して; そこにない何かを見たに違いない。

4

1 に答える 1