Недавно я заметил, что объявление массива, содержащего 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 + "";
Мне было интересно, почему это так, и если можно обойти эту проблему.