Java thực hiện cả biên dịch và giải thích,
Trong Java, các chương trình không được biên dịch thành các tệp thực thi ; chúng được biên dịch thành mã byte (như đã thảo luận trước đó), mà JVM (Máy ảo Java) sau đó diễn giải / thực thi khi chạy. Mã nguồn Java được biên dịch thành mã byte khi chúng tôi sử dụng trình biên dịch javac. Mã byte được lưu trên đĩa với phần mở rộng tệp. Class . .
Khi chương trình được chạy, mã byte được chuyển đổi , mã byte có thể được chuyển đổi, sử dụng trình biên dịch chỉ trong thời gian (JIT). Kết quả là mã máy sau đó được đưa vào bộ nhớ và được thực thi.
Javac là trình biên dịch Java dịch mã Java thành mã byte. JVM là Máy ảo Java chạy / Phiên dịch / dịch mã byte thành mã máy gốc. Trong Java mặc dù nó được coi là ngôn ngữ được diễn giải, nó có thể sử dụng trình biên dịch JIT (Just-in-Time) khi mã byte nằm trong JVM. Trình biên dịch JIT đọc mã byte trong nhiều phần (hoặc toàn bộ, hiếm khi) và biên dịch chúng thành mã máy để chương trình có thể chạy nhanh hơn, sau đó được lưu trữ và sử dụng lại sau đó mà không cần phải biên dịch lại. Vì vậy, quá trình biên dịch JIT kết hợp tốc độ của mã được biên dịch với tính linh hoạt của diễn giải.
An ngôn ngữ diễn giải là một loại lập trình ngôn ngữ mà hầu hết các hiện thực của nó thực hiện các hướng dẫn trực tiếp và tự do, mà không trước đây soạn thảo một chương trình vào hướng dẫn ngôn ngữ máy. Trình thông dịch thực thi chương trình trực tiếp, dịch từng câu lệnh thành một chuỗi gồm một hoặc nhiều chương trình con đã được biên dịch thành mã máy.
Một ngôn ngữ biên dịch là một ngôn ngữ lập trình có triển khai thường các trình biên dịch (dịch mà tạo ra mã máy từ mã nguồn), và không dịch viên (step-by-step Chấp hành mã nguồn, nơi không có dịch pre-runtime xảy ra)
Trong các triển khai ngôn ngữ lập trình hiện đại như trong Java, ngày càng phổ biến cho một nền tảng để cung cấp cả hai tùy chọn.