× Giới thiệu Lịch khai giảng Tin tức Sản phẩm học viên

JVM máy chủ ảo Java - Tìm hiểu nhanh về JVM và kiến trúc JVM

13/04/2021 02:00

Trong hướng dẫn Java này, chúng ta sẽ thảo luận về Máy chủ ảo Java (JVM), là một trong những khía cạnh quan trọng nhất của ngôn ngữ lập trình Java. Chúng ta sẽ nghiên cứu về kiến ​​trúc JVM và các hệ thống con của nó.  Bên cạnh đó, chúng ta sẽ thảo luận ngắn gọn về khái niệm Máy ảo Java và cách  hoạt động như thế nào. Hơn nữa, chúng ta sẽ thảo luận chi tiết về Java Classloader, một công cụ điều hành trong Java, Mô hình bộ nhớ Java và màn hình JVM.

 

JVM - Máy chủ ảo Java là gì?

Như chúng ta đều biết rằng chúng ta cần phải biên dịch hoặc thông dịch bất kỳ mã nguồn nào trước khi thực thi nó. Nhưng Java sử dụng kết hợp cả hai, tức là trình biên dịch cũng như trình thông dịch. Các chương trình Java đầu tiên được biên dịch thành Mã Byte Java (Dạng nhị phân) và sau đó một trình thông dịch Java đặc biệt sẽ thông dịch chúng cho một nền tảng cụ thể.

 

Java ByteCode là ngôn ngữ máy cho máy ảo Java (JVM). JVM chuyển đổi mã byte nhị phân đã biên dịch thành một ngôn ngữ máy cụ thể. Máy ảo Java hoạt động như một phần con của Java Runtime Environment (JRE).

JVM là một máy trừu tượng hoạt động trên đầu các quy trình hiện có. Chúng tôi có thể thực hiện nó trong phần cứng hoặc phần mềm. JVM kết hợp với các API Java tạo nên Nền tảng Java. Công dụng thiết yếu của JVM là HotSpot.

Chúng ta có thể định nghĩa JVM theo ba cách:

  1.  Một đặc tả (specification) chỉ định hoạt động của Máy ảo Java. Cung cấp việc triển khai độc lập để lựa chọn thuật toán.
  2.  Một triển khai (Implementation ) được gọi là Java Runtime Environment (JRE).
  3. Phiên bản thời gian chạy ( Runtime Instance) tạo ra một phiên bản JVM khi bạn viết lệnh trên dấu nhắc lệnh để chạy lớp java.

định nghĩa JVM theo ba cách

Định nghĩa JVM theo ba cách

Làm việc với JVM - máy chủ ảo Java

JVM (Máy ảo Java) hoạt động như một công cụ thời gian chạy để chạy các ứng dụng Java. JVM gọi phương thức chính có trong mã Java. Máy ảo Java (JVM) là một phần của JRE (Java Runtime Environment).

Các ứng dụng Java là WORA (Write Once Run Anywhere). Điều này có nghĩa là chúng ta chỉ cần viết các chương trình Java một lần, chúng có thể chạy trên các nền tảng khác nhau mà không cần thực hiện các thay đổi trong chương trình Java.

Khi chúng ta biên dịch tệp .java, trình biên dịch sẽ tạo các tệp .class (chứa mã byte) có cùng tên với tên của lớp có trong tệp .java. Khi chúng ta chạy một tệp .class, nó sẽ trải qua nhiều bước khác nhau.

Cách máy chủ ảo JVM hoạt động

Cách máy chủ ảo JVM hoạt động

Kiến trúc JVM trong Java

Có ba hệ thống con chính trong Kiến trúc JVM:

  1. ClassLoader
  2. Vùng nhớ - Memory Area
  3. Công cụ thực thi - Execution Engine

 

Kiến trúc JVM trong Java

Kiến trúc JVM trong Java

Java ClassLoader

JVM model

Model JMV - máy chủ ảo Java

ClassLoader là thành phần của Kiến trúc JVM tải các lớp trong bộ nhớ. Mỗi JVM bao gồm một ClassLoader. Ba bộ nạp lớp tích hợp trong Java là:

  • Bootstrap ClassLoader: Đây là trình nạp lớp là siêu lớp của trình tải lớp Mở rộng. Nó tải tệp rt.jar.

  • ClassLoader Extension: là ClassLoader tải các tệp jar có trong thư mục. Đây là Bootstrap classLoader con và là cha của System classloader.
  • System/ Application ClassLoader: Nó là classLoader tải các tệp lớp từ classpath. Đây là con của trình tải lớp Mở rộng.
  • Ba chức năng quan trọng của ClassLoader là Khởi tạo, Tải, Liên kết.

>>> Đọc thêm: Exception trong Java - Tìm hiểu ví dụ của ngoại lệ trong Java

 

JVM Memory Area - Vùng nhớ trong JVM - máy chủ ảo Java

  1. Vùng phương thức - Nó lưu trữ cấu trúc của mỗi lớp như dữ liệu phương thức, dữ liệu trường, nhóm thời gian chạy, siêu dữ liệu.
  2. Heap - Heap là vùng thời gian chạy nơi diễn ra việc cấp phát đối tượng.
  3. Stacks - Ngăn xếp lưu trữ các kết quả từng phần và các biến cục bộ của một chương trình. Bất cứ khi nào một luồng được tạo, sẽ có sự tạo đồng thời của ngăn xếp JVM. Khi chúng ta gọi một phương thức, một khung mới sẽ tạo và hủy cùng lúc khi quá trình gọi hoàn tất.
  4. PC Register - Nó lưu trữ địa chỉ của lệnh JVM hiện đang thực thi.
  5. Native Method Stacks - Nó bao gồm tất cả các phương thức gốc được yêu cầu trong bất kỳ ứng dụng nào. Nó không được viết bằng java.

Execution Engine trong Java

Execution Engine trong Java là thành phần của JVM, nó sẽ đọc dữ liệu từ các vị trí bộ nhớ và thực hiện các lệnh. Nó có ba thành phần chính là bộ xử lý ảo, trình thông dịch và trình biên dịch JIT.

  1. Bộ xử lý ảo
  2. Thông dịch viên: Đọc luồng bytecode sau đó thực hiện các hướng dẫn.
  3. Trình biên dịch Just-In-Time (JIT): Nó cải thiện hiệu suất. JIT biên dịch đồng thời các phần của mã byte có chức năng tương tự và giảm lượng thời gian cần thiết để biên dịch.

>>> Tham khảo: Khóa học lập trình Java

Sự khác biệt giữa JVM, JDK và JRE

Sau đây là một số khác biệt quan trọng giữa JDK, JVM và JRE.

  1. JVM là viết tắt của Java Virtual machine, JDK là viết tắt của Java development kit, và JRE là viết tắt của Java runtime environment.
  2. JDK dành cho môi trường phát triển trong khi JRE dành cho môi trường thời gian chạy.
  3. JVM chạy bên trong môi trường JRE. JRE chứa các thư viện lớp, Máy ảo Java và các tệp khác ngoài các công cụ phát triển như trình biên dịch và trình gỡ lỗi.
  4. JRE là một tập con của JDK. JDK chứa JRE cùng với các công cụ phát triển như trình biên dịch, trình gỡ lỗi,

Kết luận: Bài viết trên đã giúp bạn tìm hiểu chi tiết về máy chủ ảo Java - JVM. Bên cạnh đó, chúng ta cũng đã tìm hiểu về kiến trúc và so sánh JVM với một số thuật ngữ khác. Hy vọng bạn đã hiểu rõ về JVM và có thể ứng dụng nó trong lập trình. Tìm hiểu thêm về Java và các ngôn ngữ khác qua các khóa học lập trình tại T3H bạn nhé!