Пожалуйста, сравните два способа установки/возврата массива:
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
Оба генерируют разные байт-коды, и оба могут быть декомпилированы в свои прежнее состояние. После проверки времени выполнения с помощью профилировщика (100 млн итераций, объективно, в разных средах) время метода _1 составляет прибл. 4/3 времени _2, хотя оба создают новый массив и оба устанавливают для каждого поля заданное значение. Время в большинстве случаев незначительно, но меня это все еще беспокоит - почему _1 заметно медленнее? Кто-нибудь может проверить/подтвердить/объяснить мне это разумным способом, поддерживаемым JVM?