JVM (Java Virtual Machine) _ Kiến trúc

22 tháng 01, 2019 – 789 lượt xem

I. Khái niệm JVM (Java Virtual Machine)

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 :

What is JVM Nó là:

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.

Nó hoạt động như thế nào?
JVM thực hiện các công việc sau:

Loads code – tải mã lệnh
Verifies code – Kiểm tra mã lệnh
Executes code – thực thi mã lệnh
Provides runtime environment – công cấp môi trường biên dịch mã
JVM cung cấp các định nghĩa cho:

Memory area – vùng nhớ
Class file format – Định dạng các class
Register set – setup đăng ký
Garbage-collected heap – Xóa dữ liệu rác
Fatal error reporting – Tổng hợp báo cáo

II. Kiến trúc bên trong của JVM

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:
Classloader là một hệ thống phụ của JVM được sử dụng để tải các file class.

Class (Method) Area:
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ó

Heap:
Đây là khu vực dữ liệu thời gian chạy trong đó các đối tượng được phân bổ.

Stack:
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 phân phối 1 JVM stack riêng, được tạo cùng thời hạn 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 xong .

Program Counter Register:
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.

Native Method Stack:
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.

Execution Engine:
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ể.