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
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
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)
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.
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. –
- 1. Làm thế nào để chuyển đổi một công thức thành dạng bình thường không bình thường?
- 2. Làm thế nào để hỗ trợ nhiều lựa chọn văn bản qua trình duyệt?
- 3. Python cho một lập trình viên Perl
- 4. Làm thế nào để gán một Chạy đến một thuộc tính văn bản, theo lập trình?
- 5. Nguồn cho việc học Java là một lập trình viên
- 6. Cuộc phiêu lưu của một Lập trình viên Web ở Applicationland (hoặc, Cần trợ giúp Java thực tế)
- 7. làm thế nào để chuyển đổi một input stream đến một đối tượng java
- 8. Lập trình Puzzle: Làm thế nào để vẽ một bảng?
- 9. Cần một hướng dẫn C# nhanh cho các lập trình viên không phải là ngắn hạn
- 10. Cần một bản đồ/bảng Java có nhiều khóa với một giá trị. Giá trị thường được thay đổi
- 11. Làm thế nào để lập trình sửa đổi một DataTemplate?
- 12. Làm thế nào để tạo một trình định dạng ngày chung trong java cho Solr?
- 13. Khi nào cần hỗ trợ Windows 64?
- 14. Làm thế nào để hỗ trợ nhiều gói npm riêng tư sống trong một repo git?
- 15. Hỗ trợ cần điều khiển trong Java
- 16. Magento - Làm thế nào để lập trình một phụ huynh mới cho một thể loại?
- 17. Làm thế nào để chuyển đổi một chuỗi trích dẫn thành một bình thường trong Makefile?
- 18. Làm thế nào để xác định một lược đồ cho một bảng quan hệ nhiều-nhiều?
- 19. Giúp một sinh viên khiếm thị được thiết lập cho các lớp lập trình
- 20. Làm thế nào để chuyển đổi một mảng kết quả ActiveRecord thành một mảng bình thường?
- 21. Làm cách nào để giải thích cho một lập trình viên rằng việc định vị CSS có nhiều lợi ích hơn so với bố cục dựa trên bảng?
- 22. Làm thế nào tôi có thể lập trình tạo, đọc, viết một excel mà không cần cài đặt văn phòng?
- 23. Tại sao các lập trình viên C# không được ruby làm lập trình viên java là
- 24. công cụ tìm kiếm thân thiện với lập trình viên?
- 25. Làm cách nào để hỗ trợ nhiều loại tùy chỉnh?
- 26. Một đến nhiều với một bảng
- 27. Làm thế nào để chạy một khung công tác OSGi trong mã java thông thường?
- 28. JIT vs Thông dịch viên
- 29. Làm thế nào để viết một bổ trợ để thay đổi màu văn bản trong trình soạn thảo Visual Studio?
- 30. Làm thế nào để chuyển đổi một chương trình java thành daemon với jsvc?
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. –
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