Нещодавно я помітив, що оголошення масиву, що містить 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()
з бенчмаркінгом.