2011-12-31 30 views
9

Trong khi đọc Jack Shirazi của 'Java điều chỉnh hiệu suất', tôi đi qua các tuyên bố sau:tĩnh/biến dụ hiệu suất hoạt động của Java

"Instance và các biến tĩnh có thể lên đến một bậc chậm hơn để hoạt động trên khi so với đối số phương pháp và biến cục bộ. "

Điều này vẫn áp dụng cho Java 6/7? Và nếu có, lý do đằng sau nó là gì? (Anh ấy đã giải thích điều gì đó về việc có các bytecode đặc biệt để truy cập vào các biến/tham số cục bộ nhưng tôi không hiểu nó).

Trả lời

9

Các từ khóa ở đây là có thể là. có thể có trong sổ đăng ký, trong khi các biến mẫu và biến tĩnh cuối cùng sẽ kết thúc trong bộ nhớ (chúng sẽ được đăng nhập vào thời gian cần thiết để hoạt động trên chúng, nhưng cuối cùng trở lại bộ nhớ họ đi).

3

Ngay cả khi quyền truy cập chậm hơn 10 lần, điều đó chỉ quan trọng nếu bạn ở trong vòng lặp rất dài. Và Mô hình bộ nhớ Java khá thông minh (đôi khi "quá" thông minh) về việc tối ưu hóa truy cập bộ nhớ đối với các biến mẫu. Nếu bạn sử dụng một cá thể var trong một vòng lặp dài, giả sử, tổng cộng 100.000 đôi, JVM rất có khả năng tối ưu hóa truy cập đó và, trên thực tế, không ghi kết quả vào bộ nhớ mỗi lần. Trường hợp ngoại lệ là các trường dễ bay hơi. Trong thực tế, toàn bộ vấn đề tối ưu hóa này là lý do tại sao có các trường dễ bay hơi.