bạn viết tay, hình thức "cũ" thực hiện các lệnh ít hơn, và có thể được. nhanh hơn, mặc dù bạn phải cấu hình nó theo một trình biên dịch JIT cụ thể để biết chắc chắn. Biểu mẫu "mới" chắc chắn là không phải là nhanh hơn.
Nếu bạn nhìn vào mã tháo rời (biên soạn bởi của Sun JDK 1.5), bạn sẽ thấy rằng hình thức "mới" là tương đương với đoạn mã sau:
1: double[] tmp = doubleArray;
2: for (int i = 0, y = tmp.length; i < y; i++) {
3: double var = tmp[i];
4: someComplexCalculation(var);
5: }
Vì vậy, bạn có thể thấy rằng địa phương hơn biến được sử dụng.Việc gán doubleArray
đến tmp
ở dòng 1 là "phụ", nhưng nó không xảy ra trong vòng lặp và có thể không đo được. Việc gán cho số var
ở dòng 3 cũng được bổ sung. Nếu có sự khác biệt về hiệu suất, điều này sẽ có trách nhiệm.
Dòng 1 có vẻ không cần thiết, nhưng đó là bản mẫu để lưu kết quả nếu mảng được tính bằng phương pháp trước khi vào vòng lặp.
Điều đó nói rằng, tôi sẽ sử dụng biểu mẫu mới, trừ khi bạn cần phải làm điều gì đó với biến chỉ mục. Bất kỳ sự khác biệt hiệu năng nào cũng có thể được tối ưu hóa bởi trình biên dịch JIT trong thời gian chạy và biểu mẫu mới rõ ràng hơn. Nếu bạn tiếp tục làm điều đó "bằng tay", bạn có thể bỏ lỡ các tối ưu hóa trong tương lai. Nói chung, một trình biên dịch tốt có thể tối ưu hóa mã "ngu ngốc" tốt, nhưng tình cờ gặp phải mã "thông minh".
Mất bao nhiêu bộ nhớ. 80GB? – JesperE
Tôi thực sự đã không suy nghĩ khi tôi viết rằng ... nhưng yeah. 80Gb – Dan
Thực ra, nó sẽ không biên dịch vì 10000000000 không phải là một int. –