public class Test {
public static void main(String[] args) {
int x = 150_000;
long start = System.currentTimeMillis();
for(int i = 0; i < x; i++) {
f1(i);
}
long end = System.currentTimeMillis();
System.out.println((end - start)/1000.0);
}
private static long f1(int n) {
long x = 1;
for(int i = 0; i < n; i++) {
x = x + x;
}
return x;
}
}
Ai đó có thể giải thích lý do tại sao đặt x thành 150_000
hoặc 4_000_000
hoặc thậm chí 2_000_000_000
không thay đổi thời gian thực hiện của vòng lặp này?Tại sao thời gian thực hiện vòng lặp của tôi không thay đổi?
Có lẽ trình biên dịch đủ thông minh để phát hiện rằng không có gì xảy ra trong vòng lặp nên nó tối ưu hóa. – Tunaki
Bạn đã làm thế nào? –
@Tunaki Đó cũng là dự đoán của tôi. 'f1' trả về một số giá trị, nhưng giá trị đó không bao giờ được sử dụng và không có biến nào khác đang được sửa đổi trong phương thức. Nó sẽ có ý nghĩa (với tôi ít nhất) rằng trình biên dịch hoàn toàn bỏ qua cuộc gọi. –