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