Ostatnio zauważyłem, że deklarowanie tablicy zawierającej 64 elementy jest dużo szybsze (> 1000 razy) niż deklarowanie tego samego typu tablicy z 65 elementami.
Oto kod, którego użyłem do przetestowania tego:
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");
}
}
Ta przebiega w około 6 ms, jeśli zastąpi new double[64]się new double[65]trwa około 7 sekund. Ten problem staje się wykładniczo poważniejszy, jeśli praca jest rozłożona na coraz więcej wątków, stąd mój problem.
Ten problem występuje również w przypadku różnych typów tablic, takich jak int[65]lub String[65]. Ten problem nie występuje w przypadku dużych ciągów:, String test = "many characters";ale zaczyna się pojawiać po zmianie naString test = i + "";
Zastanawiałem się, dlaczego tak jest i czy da się obejść ten problem.
System.nanoTime()powinno być preferowane wSystem.currentTimeMillis()przypadku testów porównawczych.