2013-06-28 21 views
6

Java JIT có biên dịch bytecode với cùng một tối ưu hóa ở mọi lần chạy trên cùng một máy không?Java JIT có biên dịch bytecode xác định - tối ưu hóa giống nhau cho mọi lần chạy trên cùng một máy không?

Liệu nó có tính đến các yếu tố động như sử dụng CPU tại một thời điểm cụ thể hay nó sẽ tối ưu hóa cùng một lần bất kể các yếu tố tạm thời?

+0

Trình biên dịch Java JIT nào? – SLaks

+1

Tôi muốn biết về HotSpot – selig

+0

Nếu chương trình của bạn có tính ngẫu nhiên và một cuộc gọi chạy phương thức A và một phương thức gọi khác B, thì không, bạn sẽ không nhận được cùng một tối ưu hóa. –

Trả lời

4

Không, tối ưu hóa không xác định. Ngay cả khi bạn chạy chính xác cùng một luồng, chương trình hoàn toàn xác định, mẫu được JIT sử dụng để xác định phương pháp nào để tối ưu hóa có thể chọn một tập hợp khác.

Một thứ khác có thể thay đổi mã máy được tạo là vị trí bộ nhớ thực của các hằng số nhất định được tham chiếu bởi mã. JIT có thể phát ra các hướng dẫn máy trực tiếp truy cập vào các vị trí bộ nhớ này, dẫn đến sự khác biệt bổ sung giữa mã máy trên các thẻ khác nhau.

Các nhà nghiên cứu sử dụng Jikes RVM đã giải quyết vấn đề này cho điểm chuẩn của họ bằng cách sử dụng tính năng được gọi là Compiler Replay.

Các vấn đề liên quan