favore confronta due modi di impostazione/ritorno un array:modo preferito di impostazione/array ritorno
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
Sia generare bytecodes distinti ed entrambi possono essere decompilato al loro stato precedente. Dopo aver controllato i tempi di esecuzione tramite profiler (100 milioni di iterazioni, non distorto, diversi ambienti), il tempo di _1 metodo è di ca. 4/3 il tempo di _2, anche se entrambi creano un nuovo array ed entrambi impostano ogni campo su un valore dato. I tempi sono trascurabili per la maggior parte del tempo, ma questo mi infastidisce ancora: perché _1 è visibilmente più lento? Qualcuno può controllarlo/confermarlo/spiegarmelo in un modo ragionevole supportato da JVM?
Le rappresentazioni di bytecode corrispondenti sono abbastanza corte da postare qui? –
I tempi medi di 1000 * 1000000 chiamate sono gli stessi per entrambi i metodi, almeno per me. – IchBinKeinBaum
caro downvoter, potresti spiegare come questa domanda * non * mostri uno sforzo di ricerca e in che modo * non sia utile * ad altri utenti, specialmente se i voti vengono mostrati diversamente? – vaxquis