Trình biên dịch Java chuẩn thực hiện một số tối ưu hóa, nhưng nó để lại hầu hết trong số chúng cho JIT.
JIT biết bộ xử lý nào chính xác chương trình đang chạy và cũng có quyền truy cập vào thông tin thời gian chạy và do đó nó có thể thực hiện tối ưu hóa nhiều hơn trình biên dịch Java có thể thực hiện trước. Ngoài ra, việc tối ưu hóa rộng rãi trước có thể "làm xáo trộn" mã byte một chút, khiến JIT khó hơn để tối ưu hóa nó.
Tôi không biết trình biên dịch của Google làm gì khi dịch mã byte Java sang mã Dalvik - nó có thể đang thực hiện tối ưu hóa rộng hơn.
Có lẽ công cụ này sẽ hữu ích cho bạn: Dalvik Optimization and Verification With dexopt
Bằng cách này, ví dụ bạn đề cập đến không phải lúc nào cũng có giá trị; chuyển đổi a/4
thành a >> 2
không được đảm bảo để làm cho chương trình của bạn chạy nhanh hơn trên bất kỳ bộ xử lý nào. Tôi đọc một bài báo ở đâu đó một lần (xin lỗi, không thể tìm thấy nó ngay bây giờ ...) giải thích rằng trên (tôi nghĩ) bộ xử lý x86 hiện đại, a >> 2
thậm chí có thể chậm hơn a/4
.
Trong mọi trường hợp, không thực hiện tối ưu hóa sớm như chuyển đổi a/4
thành a >> 2
bằng tay trong mã nguồn trừ khi bạn có bằng chứng thực (từ phép đo hiệu suất).
Phân chia so với thay đổi trái không có bất kỳ ảnh hưởng nào đến tốc độ chương trình tổng thể. Không phải một chút. – delnan