请比较两种设置/返回数组的方式:
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
两者都生成不同的字节码,并且都可以反编译到它们以前的状态。通过分析器检查执行时间(100M 迭代,无偏,不同环境)后,_1 方法的时间约为。_2 的 4/3 时间,尽管两者都创建了一个新数组并将每个字段都设置为给定值。大多数时候时间可以忽略不计,但这仍然困扰着我 - 为什么 _1 明显变慢?任何人都可以以合理的、JVM 支持的方式检查/确认/向我解释吗?