Cùng với JRE (Java Runtime Environment) và JDK (Java Development Kit), thì Java Virtual Machine (JVM) là những thành phần quan trọng của nền tảng Java, giúp cho nền tảng Java phát triển và thực thi các ứng dụng trong đó. Trong bài viết dưới đây chúng ta sẽ cùng nhau tìm hiểu về khái niệm cơ bản về Java virtual machine là gì? và nó được dùng để thực hiện những công việc nào?.
1. Khái niệm Java Virtual Machine là gì?
Java Virtual Machine được viết tắt (JVM) là một ứng dụng ảo cho phép chạy các chương trình của Java cũng như các chương trình được viết bằng các ngôn ngữ khác nhưng vẫn được biên dịch sang mã bytecode của Java. Vì vậy , từ một chương trình đơn giản hay phức tạp nhưng thông qua JVM thì có thể chạy được trên các nền tảng khác nhau.
JVM có nhiệm vụ quản lý bộ nhớ trong hệ thống và cung cấp môi trường thiết yếu cho ứng dụng Java, nó có hai chức năng quan trọng đó chính là cho phép chương trình Java chạy trên tất cả các thiết bị: quản lý tối ưu bộ nhớ chương trình và nền tảng khác nhau (Write once, Run anywhere)
2. Java Virtual Machine thực hiện các nhiệm vụ sau.
- Tải code (class, resource)
- Kiểm tra code (kiểm tra xem code có đúng với cú pháp hay không, có bị lỗi không, nếu trong trường hợp code lỗi thì sẽ không chạy được chương trình và ngược lại)
- Thực thi code
- Cung cấp môi trường runtime
3. Những thành phần chính của (JVM) Java Virtual Machine.
- Class Loader: đây là một hệ thống con của JVM, có nhiệm vụ tải các lớp đã được định nghĩa.
- Class Area: có nhiệm vụ lưu trữ cấu trúc của các lớp, phương thức của lớp,thuộc tính và code của các phương thức.
- Heap: đóng vai trò là vùng nhớ lưu trữ các đối tượng được khởi động trong quá trình thực thi nhiệm vụ.
- Stack: chứa tất cả các frame. Mỗi frame sẽ chứa các biến cục bộ và thực thi một hàm và trả kết quả về. Mỗi một quá trình đều có một Stack riêng và được khởi nguồn cùng lúc với quá trình đó. Khi một hàm được gọi thì mỗi frame sẽ được tạo ra và sẽ bị hủy khi việc gọi hàm kết thúc.
- Programming Counter Register: chứa những địa chỉ của máy chủ ảo đang được thực thi
- Native Method Stack: có vai trò chứa các hàm của hệ thống được sử dụng trong chương trình
- Execution Engine: là hệ thống bao gồm: trình thông dịch (đọc Java byte code và thực thi các chỉ thị), bộ xử lý ảo, JIT compiler( biên dịch mã bytecode sang mã máy). Nhiệm vụ chính của JVM bao gồm: tải code, kiểm tra, thực thi code và cung cấp môi trường runtime.
4. Cơ chế làm việc của (JVM) Java Virtual Machine là gì.
JVM được chia ra thành 3 mô-đun chính:
- Classloader Subsystem: mô-đun này có nhiệm vụ chuyên tìm kiếm và load tất cả các file .class vào vùng nhớ của Java.
- Runtime Data Area: đây là vùng nhớ hệ thống cấp phát cho Java Virtual Machine.
- Execution Engine: có nhiệm vụ chuyển các lệnh của JVM trong file .class thành lệnh của máy và hệ điều hành tương ứng rồi thực thi chúng.
5. Bộ nhớ trong của Java JVM.
Khi thực hiện một đối tượng mới hoặc cấp phát một bộ nhớ có thể sẽ được tạo và đặt vào vùng nhớ Heap. Khi ứng dụng của các bạn không còn tham chiếu tới đối tượng này thì Java garbage collector cho phép bạn xóa đối tượng này đi để sử dụng lại vùng nhớ đó.
- Java Heap: JVM giúp lưu trữ tất cả các đối tượng được tạo ra bởi toán tử “new” trong những ứng dụng Java vào vùng nhớ Heap ngay tại thời điểm chạy.
- Java Stack: Các phương thức ,tham chiếu tới đối tượng tại địa phương thì được lưu trữ trong Stack. Mỗi Stack sẽ quản lý một Thread. Khi phương thức đó được gọi, nó sẽ được đưa vào đỉnh của Stack. Stack sẽ có vai trò lưu trữ trạng thái của phương thức bao gồm: tham chiếu tới đối tượng địa phương, dòng code thực thi. Khi phương thức này chạy xong, vùng nhớ (dòng code được thực thi, tham chiếu tới đối tượng địa phương) sẽ được đẩy ra khỏi stack và tự động giải phóng.
- Java Perm: Lưu trữ những thông tin của Class được nạp vào và một số tính năng khác như StringPool (vùng nhớ của biến String) thường sẽ được tạo ra bởi phương thức String.intern. Khi những ứng dụng của bạn chạy, Perm space sẽ được lấp đầy nhanh chóng.
Qua bài viết này các bạn đã phần nào hình dung được vài nét về Java Virtual Machine là gì cũng như vai trò hay nhiệm vụ của nó trong nền tảng ứng dụng Java. Vì vậy mà Java không thể hoạt động mượt mà khí không có sự hỗ trợ của Java Virtual Machine. Nhờ có nó mà các ứng dụng của bạn trở nên mượt mà và nhanh nhậy hơn. Chúc các bạn có những trải nghiệm thật thú vị trong nền tảng ứng dụng của Java.