配列を設定/返す 2 つの方法を比較してください。
static public float[] test_arr_speeds_1( int a ) {
return new float[]{ a, a + 1, a + 2, a + 3, a + 4, a + 5,
a + 6, a + 7, a + 8, a + 9 };
} // or e.g. field = new float... in method
static public float[] test_arr_speeds_2( int a ) {
float[] ret = new float[10];
ret[0] = a;
ret[1] = a + 1;
ret[2] = a + 2;
ret[3] = a + 3;
ret[4] = a + 4;
ret[5] = a + 5;
ret[6] = a + 6;
ret[7] = a + 7;
ret[8] = a + 8;
ret[9] = a + 9;
return ret;
} // or e.g. field[0] = ... in method
どちらも別個のバイトコードを生成し、どちらも元の状態に逆コンパイルできます。プロファイラーを介して実行時間を確認した後 (1 億回の反復、偏りのない、異なる環境)、_1 メソッドの時間は約です。どちらも新しい配列を作成し、すべてのフィールドを特定の値に設定しますが、_2 の 4/3 の時間です。ほとんどの場合、時間は無視できますが、これはまだ私を悩ませています._1が目に見えて遅いのはなぜですか? JVM がサポートする合理的な方法で、誰かが確認/確認/説明してくれますか?