class A {
final int foo() { return 3; }
}
Cho lớp này, mọi lệnh gọi tới foo() có thể được thay thế bằng hằng số "3". Bất kỳ máy ảo Java1 nào cũng có thể thực hiện điều này, bởi vì từ khóa cuối cùng rõ ràng cho rằng không thể có lớp con ghi đè "int foo()".
nội tuyến phương pháp này cung cấp những lợi ích sau tại trang web cuộc gọi:
- Không gọi phương thức
- Không cử động
- Có thể liên tục lần giá trị, ví dụ. "a.foo() + 2" trở thành 5 không có mã nào được thực thi tại thời gian chạy là
.
Trong quá khứ, các lập trình viên thường chèn từ khóa thức cho chính xác lý do này. Hoặc để tạo điều kiện thuận lợi hơn cho nội tuyến và tăng tốc độ thực thi, chúng sẽ kết hợp nhiều phương thức nhỏ hơn thành một phương pháp lớn hơn. Nhưng theo nhiều cách, các kỹ thuật như vậy sẽ đánh bại toàn bộ cơ sở của mô đun hóa và khả năng sử dụng lại được xây dựng trong ngôn ngữ lập trình.
JVM hiện đại, như Java HotSpot VM có thể nội tuyến lớp mà không có final. từ khóa **.
(http://java.sun.com/developer/technicalArticles/Networking/HotSpot/inlining.html)
Trên thực tế HotSpot có thể sử dụng các phương thức nội tuyến (speculatively) ngay cả khi nó bị ghi đè, và gọi phương thức này hầu như đối với các đối tượng không thuộc kiểu mong đợi. Server HotSpot thậm chí sẽ inline hai phiên bản khác nhau của một phương thức (bimorphic inline). –
@Tom: Nếu tôi đưa câu trả lời vào câu trả lời thì sao? –
tốt, tôi chắc chắn đã có trường hợp đã được hotspot không nội tuyến và hướng dẫn sử dụng inline dẫn đến yếu tố 5 cải thiện hiệu suất của một vòng lặp xử lý lõi. –