Trong một bài giảng về JIT trong Hotspot, tôi muốn đưa ra càng nhiều ví dụ càng tốt về các tối ưu hóa cụ thể mà JIT thực hiện.Tối ưu hóa điểm nóng JIT
Tôi biết chỉ là "phương pháp nội tuyến", nhưng sẽ có nhiều hơn nữa. Hãy bỏ phiếu cho mỗi ví dụ.
Trong một bài giảng về JIT trong Hotspot, tôi muốn đưa ra càng nhiều ví dụ càng tốt về các tối ưu hóa cụ thể mà JIT thực hiện.Tối ưu hóa điểm nóng JIT
Tôi biết chỉ là "phương pháp nội tuyến", nhưng sẽ có nhiều hơn nữa. Hãy bỏ phiếu cho mỗi ví dụ.
Vâng, bạn nên quét các bài viết của Brian Goetz để biết ví dụ.
Tóm lại, HotSpot có thể và sẽ:
synchronized
khối trên cùng một đối tượngvolatile
biếnvân vân
Nhảy tới mã máy gốc tương đương thay vì giải thích JVM về mã op. Việc thiếu một nhu cầu để mô phỏng một máy (JVM) trong mã máy cho một phần được sử dụng rất nhiều của một ứng dụng Java (tương đương với một phần mở rộng của JVM) cung cấp một sự gia tăng tốc độ tốt.
Tất nhiên, đó là hầu hết những gì HotSpot là.
Có tổng quan cũ nhưng có khả năng vẫn hợp lệ trong this article.
Các điểm nổi bật dường như được thực hiện tối ưu hóa cổ điển dựa trên có sẵn thông tin profiling runtime:
Và một số thứ nhỏ như GC thế hệ giúp phân bổ các đối tượng sống ngắn hơn và nhiều tối ưu hóa nhỏ hơn khác, cùng với bất kỳ điều gì khác là quảng cáo trừ khi bài viết đó được xuất bản.
Ngoài ra còn có chi tiết hơn official whitepaper và HotSpot Internals wiki page khá nitty-gritty liệt kê cách viết mã Java nhanh cho phép bạn ngoại suy những trường hợp sử dụng nào được tối ưu hóa.
Có một bài thuyết trình tuyệt vời về tối ưu hóa sử dụng bởi JVM hiện đại trên trang web Jikes RVM: ACACES’06 - Dynamic Compilation and Adaptive Optimization in Virtual Machines
Nó thảo luận về kiến trúc, cân bằng, đo lường và kỹ thuật. Và đặt tên cho ít nhất 20 thứ mà JVM làm để tối ưu hóa mã máy.
Tôi nghĩ rằng những thứ thú vị là những thứ mà một trình biên dịch thông thường không thể làm trái với JIT. Phương thức nội tuyến, loại bỏ mã chết, CSE, phân tích trực tiếp, v.v.tất cả đều được thực hiện bởi trình biên dịch C++ trung bình của bạn, không có gì "đặc biệt" ở đây
Nhưng tối ưu hóa điều gì đó dựa trên các giả định lạc quan và sau đó khử kích thước sau này nếu chúng bị sai? (giả định một kiểu cụ thể, loại bỏ các nhánh sẽ thất bại sau này nếu không được thực hiện, ..) Loại bỏ các cuộc gọi ảo nếu chúng ta có thể đảm bảo rằng chỉ tồn tại một lớp vào lúc này (một lần nữa nó chỉ hoạt động hiệu quả với việc khử hiện tượng)? Tối ưu hóa thích nghi là tôi nghĩ rằng một điều thực sự phân biệt JIT từ chạy trình biên dịch mill C++ của bạn.
Cũng có thể đề cập đến hồ sơ thời gian chạy được thực hiện bởi JIT để phân tích tối ưu hóa nào cần áp dụng (không phải duy nhất nữa với tất cả tối ưu hóa hướng dẫn theo cấu hình).
Tuyệt vời! Cảm ơn và +1. – alf
Có vẻ như đã chết, hãy thử http://www.complang.tuwien.ac.at/andi/ACACES06.pdf – user60561