Recentemente, percebi que declarar um array contendo 64 elementos é muito mais rápido (> 1000 vezes) do que declarar o mesmo tipo de array com 65 elementos.
Aqui está o código que usei para testar isso:
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");
}
}
Este é executado em cerca de 6 ms, se eu substituir new double[64]
com new double[65]
leva aproximadamente 7 segundos. Esse problema se torna exponencialmente mais grave se o trabalho for espalhado por mais e mais threads, que é de onde meu problema se origina.
Esse problema também ocorre com diferentes tipos de matrizes, como int[65]
ou String[65]
. Esse problema não ocorre com strings grandes:, String test = "many characters";
mas começa a ocorrer quando é alterado paraString test = i + "";
Eu queria saber por que esse é o caso e se é possível contornar esse problema.
byte
vez de double
.
System.nanoTime()
deve ser preferidoSystem.currentTimeMillis()
para benchmarking.