Недавно я заметил, что объявление массива, содержащего 64 элемента, намного быстрее (более 1000 раз), чем объявление того же типа массива с 65 элементами.
Вот код, который я использовал для проверки:
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");
}
}
Это работает примерно 6 мс, если я заменю new double[64]с new double[65]занимает около 7 секунд. Эта проблема становится экспоненциально более серьезной, если задание распределяется по все большему и большему количеству потоков, откуда и возникла моя проблема.
Эта проблема также возникает с различными типами массивов, такими как int[65]или String[65]. Эта проблема не возникает с большими строками:, String test = "many characters";но начинает возникать, когда это заменяется наString test = i + "";
Мне было интересно, почему это так и можно ли обойти эту проблему.
System.nanoTime()предпочтительнееSystem.currentTimeMillis()для сравнительного анализа.