Gần đây, tôi nhận thấy việc khai báo một mảng chứa 64 phần tử nhanh hơn rất nhiều (> 1000 lần) so với việc khai báo cùng một kiểu mảng có 65 phần tử.
Đây là mã tôi đã sử dụng để kiểm tra điều này:
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");
}
}
Quá trình này chạy trong khoảng 6 mili giây, nếu tôi thay thế new double[64]
bằng new double[65]
thì mất khoảng 7 giây. Vấn đề này trở nên nghiêm trọng hơn theo cấp số nhân nếu công việc được trải rộng trên ngày càng nhiều chủ đề, đó là nguyên nhân bắt nguồn của vấn đề của tôi.
Sự cố này cũng xảy ra với các loại mảng khác nhau như int[65]
hoặc String[65]
. Sự cố này không xảy ra với chuỗi lớn:, String test = "many characters";
nhưng bắt đầu xảy ra khi điều này được thay đổi thànhString test = i + "";
Tôi đã tự hỏi tại sao lại như vậy và nếu có thể giải quyết vấn đề này.
System.nanoTime()
nên được ưu tiên hơnSystem.currentTimeMillis()
cho điểm chuẩn.