JVM là gì? Java Máy ảo Archikiến trúc

JVM là gì trong Java?

Java Máy ảo (JVM) là một công cụ cung cấp môi trường thời gian chạy để điều khiển Java Mã hoặc ứng dụng. Nó chuyển đổi Java mã byte sang ngôn ngữ máy. JVM là một phần của Java Môi trường thời gian chạy (JRE). Trong các ngôn ngữ lập trình khác, trình biên dịch tạo mã máy cho một hệ thống cụ thể. Tuy nhiên, Java trình biên dịch tạo mã cho Máy ảo được gọi là Java Máy ảo.

JVM hoạt động như thế nào?

Đầu tiên, Java mã được biên dịch thành bytecode. Mã bytecode này được diễn giải trên các máy khác nhau. Giữa hệ thống máy chủ và Java nguồn, Bytecode là một ngôn ngữ trung gian. JVM trong Java chịu trách nhiệm phân bổ không gian bộ nhớ.


Cách thức hoạt động của JVM
Làm việc của Java Máy ảo (JVM)

Trong hướng dẫn JVM này, bạn sẽ học-

Archikiến trúc của JVM (Java Máy ảo)

Bây giờ trong hướng dẫn JVM này, hãy hiểu Archikiến trúc của JVM. Kiến trúc JVM trong Java chứa trình nạp lớp, vùng bộ nhớ, công cụ thực thi, v.v.

 


JVM Archikiến trúc
Java Máy ảo Archikiến trúc

1) Trình nạp lớp
Trình tải lớp là một hệ thống con được sử dụng để tải các tệp lớp. Nó thực hiện ba chức năng chính là Tải, Liên kết và Khởi tạo.

2) Khu vực phương pháp
Vùng phương thức JVM lưu trữ các cấu trúc lớp như siêu dữ liệu, nhóm thời gian chạy không đổi và mã cho các phương thức.

3) Đống
Tất cả các Đối tượng, các biến thể hiện liên quan của chúng và các mảng được lưu trữ trong heap. Bộ nhớ này là chung và được chia sẻ trên nhiều luồng.

4) Ngăn xếp ngôn ngữ JVM
Java Ngôn ngữ Stack lưu trữ các biến cục bộ và kết quả một phần của nó. Mỗi luồng có ngăn xếp JVM riêng, được tạo đồng thời khi luồng được tạo. Một khung mới được tạo bất cứ khi nào một phương thức được gọi và nó bị xóa khi quá trình gọi phương thức hoàn tất.

5) Thanh ghi PC
Thanh ghi PC lưu trữ địa chỉ của Java lệnh máy ảo hiện đang thực thi. TRONG Java, mỗi luồng có thanh ghi PC riêng.

6) Ngăn xếp phương thức gốc
Ngăn xếp phương thức gốc chứa hướng dẫn của mã gốc tùy thuộc vào thư viện gốc. Nó được viết bằng ngôn ngữ khác thay vì Java.

7) Công cụ thực thi
Nó là một loại phần mềm dùng để kiểm tra phần cứng, phần mềm hoặc hệ thống hoàn chỉnh. Công cụ thực hiện thử nghiệm không bao giờ mang bất kỳ thông tin nào về sản phẩm được thử nghiệm.

8) Giao diện Phương thức gốc
Giao diện phương thức gốc là một khung lập trình. Nó cho phép Java mã đang chạy trong JVM để các thư viện và ứng dụng gốc gọi.

9) Thư viện phương thức gốc
Thư viện gốc là tập hợp các Thư viện gốc (C, C++) mà Công cụ thực thi cần thiết.

Quá trình biên dịch và thực thi mã phần mềm

Để viết và thực thi một chương trình phần mềm, bạn cần những điều sau

1) Biên tập viên – Để nhập chương trình của bạn vào, có thể sử dụng sổ ghi chú để thực hiện việc này

2) Trình biên dịch – Để chuyển đổi chương trình ngôn ngữ cao của bạn thành mã máy gốc

3) Trình liên kết – Để kết hợp các tệp tham chiếu chương trình khác nhau trong chương trình chính của bạn với nhau.

4) Trình tải – Để tải các tập tin từ thiết bị lưu trữ phụ của bạn như Đĩa cứng, Ổ đĩa Flash, CD vào RAM để thực thi. Việc tải được tự động thực hiện khi bạn thực thi mã của mình.

5) Thi hành – Việc thực thi thực tế mã do hệ điều hành và bộ xử lý của bạn xử lý.

Với bối cảnh này, hãy tham khảo video sau và tìm hiểu cách thức hoạt động bên trong của JVM và kiến ​​trúc của JVM (Java Máy ảo).

Nhấp chuột vào đây nếu video không thể truy cập được

Quá trình biên dịch và thực thi mã C

Để hiểu Java quá trình biên soạn trong Java. Trước tiên chúng ta hãy xem nhanh quá trình biên dịch và liên kết trong C.

Giả sử trong main, bạn đã gọi hai hàm f1 và f2. Hàm main được lưu trữ trong tệp a1.c.

Quá trình biên dịch và thực thi mã C

Hàm f1 được lưu trữ trong tệp a2.c

Quá trình biên dịch và thực thi mã C

Hàm f2 được lưu trữ trong tệp a3.c

Quá trình biên dịch và thực thi mã C

Tất cả các tệp này, tức là a1.c, a2.c và a3.c, được đưa vào trình biên dịch. Đầu ra của trình biên dịch là các tệp đối tượng tương ứng là mã máy.

Quá trình biên dịch và thực thi mã C

Bước tiếp theo là tích hợp tất cả các tệp đối tượng này vào một tệp .exe duy nhất với sự trợ giúp của trình liên kết. Trình liên kết sẽ gộp tất cả các tệp này lại với nhau và tạo ra tệp .exe.

Quá trình biên dịch và thực thi mã C

Trong quá trình chạy chương trình, chương trình tải sẽ tải a.exe vào RAM cho việc thực hiện.

Quá trình biên dịch và thực thi mã C

Java Biên dịch và thực thi mã trong Java VM

Bây giờ trong hướng dẫn JVM này, chúng ta hãy xem quy trình dành cho JAVA. Trong phần chính của bạn, bạn có hai phương thức f1 và f2.

  • Phương thức chính được lưu trữ trong tệp a1.java
  • f1 được lưu trữ trong một tệp dưới dạng a2.java
  • f2 được lưu trữ trong một tệp dưới dạng a3.java

Java Biên dịch và thực thi mã trong Java VM

Trình biên dịch sẽ biên dịch ba tệp và tạo ra 3 tệp .class tương ứng bao gồm mã BYTE. Không giống như C, không có liên kết nào được thực hiện.

Sản phẩm Java VM hoặc Java Máy ảo nằm trên RAM. Trong quá trình thực thi, sử dụng trình tải lớp, các tệp lớp được đưa vào RAM. Mã BYTE được xác minh để tìm bất kỳ vi phạm bảo mật nào.

Java Biên dịch và thực thi mã trong Java VM

Tiếp theo, công cụ thực thi sẽ chuyển đổi Bytecode thành mã máy gốc. Đây là biên dịch đúng lúc. Đây là một trong những lý do chính tại sao Java là tương đối chậm.

Java Biên dịch và thực thi mã trong Java VM

LƯU Ý: JIT hoặc Trình biên dịch đúng lúc là một phần của Java Máy ảo (JVM). Nó diễn giải một phần của Mã Byte có chức năng tương tự cùng một lúc.

Tại sao lại là Java cả ngôn ngữ được giải thích và biên dịch?

Ngôn ngữ lập trình được phân loại là

  • Ngôn ngữ cấp độ cao hơn Ex. C++, Java
  • Ngôn ngữ trung cấp Ex. C
  • Ngôn ngữ cấp thấp Ex Assembly
  • cuối cùng là cấp độ thấp nhất là Ngôn ngữ máy.

A trình biên dịch là một chương trình chuyển đổi một chương trình từ cấp độ ngôn ngữ này sang cấp độ ngôn ngữ khác. Ví dụ chuyển đổi của C++ chương trình thành mã máy. Trình biên dịch Java chuyển đổi mã Java cấp cao thành mã byte (cũng là một loại mã máy).

An thông dịch viên là một chương trình chuyển đổi một chương trình ở một cấp độ sang một ngôn ngữ lập trình khác tại đồng hạng. Ví dụ chuyển đổi của Java chương trình vào C++

In Java, trình tạo mã Just In Time chuyển đổi mã bytecode thành mã máy gốc có cùng cấp độ lập trình.

Vì thế, Java vừa được biên dịch vừa là ngôn ngữ được giải thích.

Tại sao lại là Java chậm?

Hai lý do chính đằng sau sự chậm chạp của Java đang

  1. Liên kết động: Không giống như C, việc liên kết được thực hiện trong thời gian chạy, mỗi khi chương trình được chạy Java.
  2. Trình thông dịch thời gian chạy: Việc chuyển đổi mã byte thành mã máy gốc được thực hiện trong thời gian chạy Java điều đó càng làm chậm tốc độ

Tuy nhiên, phiên bản mới nhất của Java đã giải quyết được những hạn chế về hiệu suất ở mức độ lớn.

Tổng kết:

  • Dạng đầy đủ của JVM là Java Máy ảo. JVM ở Java là động cơ dẫn động Java Mã số. Nó chuyển đổi Java mã byte sang ngôn ngữ máy.
  • Kiến trúc JVM trong Java chứa trình nạp lớp, vùng bộ nhớ, công cụ thực thi, v.v.
  • Trong JVM, Java mã được biên dịch thành mã byte. Mã byte này được diễn giải trên các máy khác nhau
  • JIT là viết tắt của Trình biên dịch đúng lúc. JIT là một phần của Java Máy ảo (JVM). Nó được sử dụng để tăng tốc thời gian thực hiện
  • So với các máy biên dịch khác, JVM trong Java có thể thực hiện chậm.