Recentemente ho notato che dichiarare un array contenente 64 elementi è molto più veloce (> 1000 volte) rispetto a dichiarare lo stesso tipo di array con 65 elementi.
Ecco il codice che ho usato per testarlo:
public class Tests{
public static void main(String args[]){
double start = System.nanoTime();
int job = 100000000;//100 million
for(int i = 0; i < job; i++){
double[] test = new double[64];
}
double end = System.nanoTime();
System.out.println("Total runtime = " + (end-start)/1000000 + " ms");
}
}
Questo viene eseguito in circa 6 ms, se sostituisco new double[64]con new double[65]ci vogliono circa 7 secondi. Questo problema diventa esponenzialmente più grave se il lavoro viene distribuito su un numero sempre maggiore di thread, da cui ha origine il mio problema.
Questo problema si verifica anche con diversi tipi di matrici come int[65]o String[65]. Questo problema non si verifica con stringhe di grandi dimensioni:, String test = "many characters";ma inizia a verificarsi quando viene modificato inString test = i + "";
Mi chiedevo perché è così e se è possibile aggirare questo problema.
System.nanoTime()dovrebbe essere preferitoSystem.currentTimeMillis()per il benchmarking.