một cách đơn giản, một JVM dịch bytecode và một thông dịch Java giải thích Java. Chúng khác nhau bởi vì bytecode và Java là các ngôn ngữ khác nhau.
Bytecode là ngôn ngữ cấp thấp, như mã máy. Bytecode có nghĩa là được chạy bởi một chương trình được gọi là thông dịch viên bytecode, còn được gọi là máy ảo . Mục đích của bytecode là phải là dễ diễn giải.
Java là ngôn ngữ cấp cao hơn, như C hoặc Python. Các ngôn ngữ này cũng có thể được diễn giải: bạn chỉ cần viết một chương trình có thể chạy mã của chúng. Nó không phải liên quan đến bytecode. Chỉ là các ngôn ngữ cấp cao khó hiểu trực tiếp hơn.
Java thường được "diễn dịch" bằng cách dịch chương trình Java thành chương trình bytecode trước. Sau đó, Máy ảo Java (JVM) chạy bytecode.
Nhưng bạn có thể diễn giải bất kỳ ngôn ngữ nào theo cách này. JVM có thể giải thích các ngôn ngữ khác nếu bạn dịch chúng sang bên phải bytecode.
Bạn cũng có thể diễn giải trực tiếp ngôn ngữ lập trình mà không cần bất kỳ bytecode nào. Một số phiên dịch BASIC chỉ cần tìm các chỉ dẫn BASIC trong mã nguồn và thực thi chúng. Họ không làm cho một chương trình mới trong một ngôn ngữ khác nhau đầu tiên. Nếu bạn đã làm điều tương tự cho Java, nó sẽ là một trình thông dịch Java nhưng không phải là một JVM.
Nguồn
2014-04-09 18:35:43
"Trình thông dịch Java thực sự là một phần của JVM." Bạn có nghĩa là thông dịch viên Java * bytecode * là một phần của JVM ... bởi vì JVM thậm chí không thấy mã Java. – flow2k
Mặc dù, điều đó sẽ không hoàn toàn chính xác, bởi vì, giống như bạn đã nói, JVM không chỉ là một trình thông dịch - nó tối ưu hóa với trình biên dịch JIT của nó mà nếu không sẽ làm cho Java không thể truy cập được đối với các ứng dụng có hiệu năng. – flow2k