предпочтительный способ установки/возврата массивов

Пожалуйста, сравните два способа установки/возврата массива:

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?

5
задан vaxquis 13 August 2014 в 17:54
поделиться