public void zero() {
int sum = 0;
for (int i = 0; i < mArray.length; ++i) {
sum += mArray[i].mSplat;
}
}
public void one() {
int sum = 0;
Foo[] localArray = mArray;
int len = localArray.length;
for (int i = 0; i < len; ++i) {
sum += localArray[i].mSplat;
}
}
Secondo il codice Android documentation, nel codice precedente, zero è più lento. Ma non capisco perché? beh non ho imparato molto in profondità, ma come so length
non è un metodo. Quindi, quando il ciclo recupera il suo valore, in che modo è diverso dal recupero dalla variabile locale? e la lunghezza dell'array è sempre fissa una volta inizializzata. Cosa mi manca?Suggerimenti sulle prestazioni domande
Fino a quando il JIT non ottimizza il codice, il primo esempio ha più lavoro da fare su ciascun ciclo. Una volta che il codice è stato compilato, dovrebbe essere lo stesso. (È su OpenJDK) –