Baru-baru ini saya menyadari bahwa mendeklarasikan array yang berisi 64 elemen jauh lebih cepat (> 1000 kali lipat) daripada mendeklarasikan tipe array yang sama dengan 65 elemen.
Inilah kode yang saya gunakan untuk menguji ini:
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");
}
}
Ini berjalan di sekitar 6 ms, jika saya mengganti new double[64]dengan new double[65]yang dibutuhkan sekitar 7 detik. Masalah ini menjadi lebih parah secara eksponensial jika pekerjaan tersebar di semakin banyak utas, dari situlah masalah saya berasal.
Masalah ini juga terjadi dengan berbagai jenis array seperti int[65]atau String[65]. Masalah ini tidak terjadi dengan string besar:String test = "many characters"; tetapi mulai terjadi saat ini diubah menjadiString test = i + "";
Saya bertanya-tanya mengapa hal ini terjadi dan apakah mungkin untuk menghindari masalah ini.
System.nanoTime()lebih disukai daripadaSystem.currentTimeMillis()untuk pembandingan.