Ok, tôi đã đọc một số cuộc thảo luận về sự khác biệt giữa JIT và thông dịch viên không hỗ trợ JIT, và tại sao JIT thường tăng hiệu suất.Không thông dịch viên JIT và phi JIT Mã sản phẩm
Tuy nhiên, câu hỏi của tôi là:
Cuối cùng, không một tổ chức phi JIT kích hoạt dịch viên phải bật bytecode (từng dòng) vào máy/mã gốc được thực hiện, giống như một trình biên dịch JIT sẽ làm ? Tôi đã nhìn thấy các bài viết và sách giáo khoa nói điều đó, và các bài viết nói rằng nó không có. Đối số thứ hai là trình thông dịch/JVM thực hiện trực tiếp bytecode này mà không tương tác với máy/mã gốc.
Nếu dịch viên phi JIT làm lần lượt từng dòng vào mã máy, có vẻ như những lợi ích chính của JIT là ...
Các thông tin tình báo của bộ nhớ đệm hoặc tất cả (JIT bình thường) hoặc thường xuyên gặp phải (tối ưu hóa các điểm nóng/thích nghi) các phần của bytecode sao cho mỗi bước biên dịch mã máy không cần thiết.
Bất kỳ trình biên dịch JIT tối ưu nào cũng có thể thực hiện dịch mã bytecode thành mã máy.
Điều đó có chính xác không? Có vẻ như có sự khác biệt nhỏ (không phải là tối ưu hóa có thể, hoặc JITting khối vs dòng theo dòng có thể) giữa việc dịch mã bytecode sang mã máy thông qua các trình thông dịch được kích hoạt không JIT và JIT.
Xin cảm ơn trước.
Cảm ơn bạn đã phản hồi! Tôi đã đọc qua cuốn sách "Bắt đầu với trò chơi và đồ họa trong C++" và đề cập đến "Người phiên dịch dịch mỗi lệnh cao cấp sang hướng dẫn ngôn ngữ máy tương đương và thực thi ngay lập tức nó." Đó là nơi mà sự nhầm lẫn bắt đầu. Tuy nhiên, nó đã nói về thông dịch viên nói chung. –
Một thông dịch viên "dịch" các lệnh cấp cao sang ngôn ngữ máy bằng cách chuyển/nhảy tới một phần của ngôn ngữ máy thực hiện thao tác được biểu thị bằng lệnh mức cao. –