2011-09-29 9 views
5

Tôi hiểu rằng Java thực hiện tối ưu hóa trên bảng và có thể tối ưu hóa các chuyển mạch tùy thuộc vào số lượng trường hợp, cho dù chuyển đổi là thưa thớt hay dày đặc và nếu mã thậm chí đủ nóng để JIT tối ưu hóa mã đã nói. Tôi chỉ tự hỏi nếu tôi cần phải cung cấp thêm "hỗ trợ" như sử dụng bitwise và trên biến đang được thử nghiệm hoặc bitwise thay đổi biến số "đẹp hơn", giả sử mã nói thực sự là rất nóng. "đẹp hơn" là 0xXX thay vì 0xFFXX. Có tài liệu JIT hotspot nào nêu rõ những gì được yêu cầu không? Thay vì "chỉ giữ nó theo nguyên tắc lập trình chung của xxx".Làm thế nào nhiều lập trình viên "hỗ trợ" Java thường cần cho một chuyển đổi để JIT đến một bảng công văn?

Trả lời

0

Vì bản thân Java chạy trên virtual machine, trừ khi tôi thiếu thứ gì đó ở đây, tôi không nghĩ có cách dễ dàng để thực hiện việc này.

Vì vậy, với Java, bạn nhận được một hộp màu đen của các loại, và để tối ưu hóa nhiều hơn là nguy hiểm, IMHO.

Đối với JIT whitepaper Hotspot, see here

+2

Tôi sợ điều này sẽ là câu trả lời. Tôi đã chỉ tự hỏi về các điều kiện cho điểm nóng hoặc JIT so sánh để tối ưu hóa một chuyển đổi dày đặc thành một bảng công văn _after_ nó đã được tìm thấy là nóng và được bầu để tối ưu hóa. –

+0

Tôi hiểu ý của bạn ở đó. Hmm, tôi sẽ đặt một Bounty vào câu hỏi này khi tôi có thể. – Coffee

1

Có không sẽ là một câu trả lời dễ dàng cho việc này.

Tôi sẽ đưa câu hỏi này đến hotspot-dev - họ có thể cung cấp thêm thông tin về cách điều này xảy ra.

Những người khác, những người có thể có những quan điểm thú vị về vấn đề này lang thang trên danh sách JVM-l chỉ gửi thư (Charlie Nutter, Remi Forax, John Rose, vv)

2

Quyết định cho một trong hai tableswitch hoặc lookupswitch đã được thực hiện bởi trình biên dịch javac. Tôi chưa bao giờ nghe nói rằng JIT cố gắng chuyển đổi một số lookupswitch thành một số tableswitch.

Vì vậy, bước đầu tiên của bạn phải là kiểm tra xem mã bytecode javac đã dịch số switch của bạn.

+0

Vì vậy, những gì sẽ là giả định mã hóa an toàn (cụ thể quy tắc biên dịch nội bộ) để đảm bảo javac làm cho nó thành một tableswitch? Thay vì chỉ "đoán" và làm thử và lỗi và đi vào bytecode, mà cảm thấy "bẩn" để làm. –

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