Trình biên dịch Java (javac.exe) lấy các tệp Java (.java) làm đầu vào và đầu ra các tệp Java bytecode (.class) (nếu mã của bạn biên dịch thành công). Sau đó, bạn thực thi trình khởi chạy Java (java.exe) và trỏ nó đến bytecode của bạn. Sau đó, nó được chuyển tới máy ảo Java (JVM) để lấy mã của bạn phần còn lại của đường đi và chuyển đổi mã byte của bạn thành mã máy (hoặc bản địa).
Bạn có thể coi đó là mã đối tượng ở gần mã máy hơn và mã bytecode được thêm từ mã máy. Ngoài ra, bytecode là di động (là một trong những lợi thế lớn của ngôn ngữ Java), trong khi mã máy cần phải được "chuyển" bằng các phương tiện của quy trình thủ công (tức là biên dịch lại cho một nền tảng hoặc kiến trúc đích khác).
Mã đối tượng là "gần như" mã máy, đó là loại ở giữa. Nó giống như một phần của mã máy. Vì tính di động của ngôn ngữ Java, bạn không thể dịch trình biên dịch mã nguồn của bạn trực tiếp thành mã máy. Bởi vì mã máy cần phải khác nhau đối với các nền tảng và kiến trúc khác nhau. Nếu ai đó chạy bytecode của bạn trên Windows, JVM sẽ dịch mã byte của bạn thành một loại mã máy. Nếu ai đó chạy bytecode của bạn trên Mac OS X, JVM sẽ dịch bytecode của bạn thành một loại mã máy khác.
Bạn có thể nghĩ JVM là thông dịch viên cho mã byte của bạn. Mặc dù về mặt kỹ thuật, nó được gọi là biên dịch JIT (Just In Time). JVM là một phần của JRE (Java Runtime Environment) và trong khi các chương trình Java có nhiều nền tảng độc lập (bất kỳ hệ thống nào chạy JVM cũng có thể chạy các chương trình Java), phần JVM của JRE phụ thuộc vào nền tảng.
Phiên bản ngắn:
- trình biên dịch Java bytecode sản xuất (biên soạn một nửa đường đi, nền tảng độc lập, chưa thể chạy).
- Máy ảo Java tạo mã máy.
- Mã đối tượng là một phần của mã máy kết quả.
- Bytecode trở thành mã đối tượng tại thời điểm JIT.
- Mã đối tượng trở thành mã máy (phần còn lại biên dịch, phụ thuộc nền tảng, có thể chạy).
Điều này có thể không chính xác 100% vì tôi cũng mới bắt đầu tìm hiểu nội dung này.Nhưng đây là sự hiểu biết của tôi về khái niệm này cho đến nay. Tôi hi vọng cái này giúp được.
Trình biên dịch Java biên dịch mã nguồn thành mã byte. Tôi chưa bao giờ nghe nói về "mã đối tượng". –
một cuốn sách của một trong các giáo sư của bạn? :) là nó được viết bằng tiếng Anh? – milan