Recientemente, noté que declarar una matriz que contiene 64 elementos es mucho más rápido (> 1000 veces) que declarar el mismo tipo de matriz con 65 elementos.
Aquí está el código que usé para probar esto:
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");
}
}
Esto se ejecuta en aproximadamente 6 ms, si reemplazo new double[64]
con new double[65]
que tarda aproximadamente 7 segundos. Este problema se vuelve exponencialmente más grave si el trabajo se distribuye en más y más subprocesos, que es donde se origina mi problema.
Este problema también ocurre con diferentes tipos de matrices como int[65]
o String[65]
. Este problema no ocurre con cadenas grandes:, String test = "many characters";
pero comienza a ocurrir cuando se cambia aString test = i + "";
Me preguntaba por qué es así y si es posible eludir este problema.
System.nanoTime()
debería preferirseSystem.currentTimeMillis()
a la evaluación comparativa.