JVM (Java Virtual Machine) là 1 máy ảo java - trình thông dịch của Java. Nó cung cấp môi trường để code java có thể được thực thi, chương trình Java khi biên dịch sẽ tạo ra các file *.class chứa byte code , Các file *.class này sẽ được JVM thực hiện chuyển byte code thành mã máy tương ứng với từng hệ điều hành và phần cứng khác nhau thực thi. Các bạn có thể tham khảo cơ chế thực hiện 1 chương trình Java trong sơ đồ dưới đây :
A specification: Nơi làm việc của JVM được quy định.JVM cung cấp các thuật toán đọc lập được cung cấp bởi Sun và nhiều công ty phát triển phần mềm khác.
An implementation: 1 implemention được biết đến chính là JRE. JRE là một ứng dụng nền giúp thực thi các file mã máy đã được biên dịch từ file nguồn *.java. Các thành phần của JRE chỉ bao gồm các gói Java và thư viện thực thi ứng dụng (runtime libraries) nên JRE không có khả năng biên dịch file Java thành mã máy chỉ có khả năng thực thi các file byte code sau khi đã được JDK biên dịch.
Runtime Instance : Bất cứ khi nào bạn viết lệnh java trên dấu nhắc lệnh để chạy các lớp java, và instance của JVM được tạo ra.
JVM thực hiện các công việc sau:
JVM cung cấp các định nghĩa cho:
Hãy hiểu cấu trúc bên trong của JVM. Nó chứa classloader, khu vực bộ nhớ, bộ máy thực thi,...
Classloader là một hệ thống phụ của JVM được sử dụng để tải các file class.
Cửa hàng lớp (Method): Vùng chứa các class và cung cấp các class nền tảng cho phép mở rộng hoặc ghi đè lên nó
Đây là khu vực dữ liệu thời gian chạy trong đó các đối tượng được phân bổ.
Java stack store frames. Nó lưu trữ các biến địa phương và kết quả từng phần, và đóng một phần trong phương pháp gọi và trở về.
Mỗi thread cung cấp 1 JVM stack riêng, được tạo cùng thời gian với thread.
Một new frame được tạo ra mỗi lần method được gọi. Một frame bị hủy khi method được gọi của nó hoàn thành.
PC (đếm chương trình) đăng ký. Nó chứa địa chỉ của các máy ảo Java hướng dẫn hiện đang được thực hiện.
Nó chứa tất cả các phương pháp có nguồn gốc được sử dụng trong các ứng dụng.
Nó chứa:
Một bộ xử lý ảo
Phiên dịch: Đọc dòng bytecode sau đó thực hiện các hướng dẫn.
Just-In-Time (JIT) biên dịch: Nó được sử dụng để cải thiện performance.JIT biên dịch các phần của mã byte có chức năng tương tự như cùng một lúc, và do đó làm giảm số lượng thời gian cần thiết cho compilation.Thuật ngữ: trình biên dịch: đề cập đến như một dịch giả từ những hướng dẫn của một máy ảo Java (JVM) cho các tập lệnh của CPU cụ thể.
Nguồn: Devmaster Academy