JVM là gì?
Máy ảo Java (JVM) là một công cụ cung cấp môi trường thời gian chạy để điều khiển Mã Java hoặc các ứng dụng. Nó chuyển đổi Java bytecode thành ngôn ngữ máy. JVM là một phần của Java Run Environment (JRE). Trong các ngôn ngữ lập trình khác, trình biên dịch tạo ra mã máy cho một hệ thống cụ thể. Tuy nhiên, trình biên dịch Java tạo ra mã cho Máy ảo được gọi là Máy ảo Java.
Đây là cách hoạt động của JVM
Đầu tiên, mã Java được tuân theo thành bytecode. Bytecode này được thông dịch trên các máy khác nhau
Giữa hệ thống máy chủ và mã nguồn Java, Bytecode là một ngôn ngữ trung gian.
JVM trong Java chịu trách nhiệm cấp phát không gian bộ nhớ.

Trong hướng dẫn JVM này, bạn sẽ học-
- Kiến trúc JVM
- Quy trình biên dịch và thực thi mã phần mềm
- Quy trình biên dịch và thực thi mã C
- Quy trình biên dịch và thực thi mã Java
- Tại sao Java vừa là ngôn ngữ thông dịch vừa là ngôn ngữ biên dịch?
- Tại sao Java chậm?
Kiến trúc JVM
Bây giờ trong hướng dẫn JVM này, chúng ta hãy hiểu Kiế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.
1) ClassLoader
Bộ 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. Đang tải, liên kết và khởi tạo.
2) Khu vực phương pháp
Khu vực 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 phiên bản có 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
Ngôn ngữ Java Ngăn xếp lưu trữ các biến cục bộ và nó là một phần kết quả. Mỗi luồng có ngăn xếp JVM của riêng nó, đượ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ó sẽ bị xóa khi quá trình gọi phương thức hoàn tất.
5) Đăng ký PC
Thanh ghi PC lưu trữ địa chỉ của lệnh máy ảo Java hiện đang thực thi. Trong Java, mỗi luồng có một thanh ghi PC riêng biệt.
6) Ngăn xếp phương pháp gốc
Các ngăn xếp phương thức gốc giữ lệnh của mã gốc phụ thuộc vào thư viện gốc. Nó được viết bằng một 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 được sử 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 thi 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 Native Method
Giao diện phương pháp bản địa là một khung lập trình. Nó cho phép mã Java đang chạy trong JVM được gọi bởi các thư viện và ứng dụng gốc.
9) Thư viện phương pháp bản địa
Thư viện bản địa là một tập hợp các Thư viện bản địa (C, C ++) mà Execution Engine cần.
Quy 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) Trình chỉnh sửa - Để nhập chương trình của bạn vào, một notepad có thể được sử dụng cho 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 chương trình khác nhau tham chiếu trong chương trình chính của bạn với nhau.
4) Bộ tải - Để tải các tệp 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 thực hiện tự động khi bạn thực thi mã của mình.
5) Thực thi - Thực thi mã được xử lý bởi hệ điều hành và bộ xử lý của bạn.
Với nền tảng này, hãy tham khảo video sau và tìm hiểu kiến trúc và hoạt động bên trong JVM của JVM (Máy ảo Java).
Bấm vào đây nếu video không thể truy cập được
Quy trình biên dịch và thực thi mã C
Để hiểu quy trình biên dịch Java trong Java. Đầu 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 chính được lưu trữ trong tệp a1.c.
Hàm f1 được lưu trữ trong tệp a2.c
Hàm f2 được lưu trữ trong tệp a3.c
Tất cả các tệp này, tức là, a1.c, a2.c và a3.c, được cung cấp cho trình biên dịch. Đầu ra của ai là các tệp đối tượng tương ứng là mã máy.
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ẽ kết hợp tất cả các tệp này lại với nhau và tạo ra tệp .exe.
Trong quá trình chạy chương trình, một chương trình trình nạp sẽ tải a.exe vào RAM để thực thi.
Biên dịch và thực thi mã Java trong máy ảo Java
Bây giờ trong hướng dẫn JVM này, chúng ta hãy xem xét quy trình cho JAVA. Trong 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
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 .
Máy ảo Java hoặc Máy ảo Java nằm trên RAM. Trong quá trình thực thi, sử dụng trình nạp lớp, các tệp lớp sẽ được đưa vào RAM. Mã BYTE được xác minh cho bất kỳ vi phạm bảo mật nào.
Tiếp theo, công cụ thực thi sẽ chuyển đổi Bytecode thành mã máy Native. Đây chỉ là trong thời gian biên dịch. Đó là một trong những lý do chính khiến Java tương đối chậm.
LƯU Ý: Trình biên dịch JIT hoặc Just-in-time là một phần của Máy ảo Java (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 Java vừa là ngôn ngữ thông dịch vừa là ngôn ngữ 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ữ cấp trung bình Ex. C
- Hợp ngữ Ex của ngôn ngữ cấp thấp
- cuối cùng là mức thấp nhất là Ngôn ngữ máy.
Một trình biên dịch là một chương trình giúp chuyển đổi một chương trình từ một mức độ ngôn ngữ khác. Ví dụ chuyển đổi chương trình C ++ thành mã máy.
Trình biên dịch java chuyển đổi mã java cấp cao thành bytecode (cũng là một loại mã máy).
Trình thông dịch là một chương trình chuyển đổi một chương trình ở cấp độ này sang ngôn ngữ lập trình khác ở cùng cấp độ. Ví dụ chuyển đổi chương trình Java thành C ++
Trong 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.
Do đó, Java vừa được biên dịch vừa là ngôn ngữ thông dịch.
Tại sao Java chậm?
Hai lý do chính đằng sau sự chậm chạp của Java là
- Liên kết động: Không giống như C, liên kết được thực hiện tại thời điểm chạy, mỗi khi chương trình được chạy trong Java.
- 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 tại thời điểm chạy trong Java, điều này làm chậm tốc độ
Tuy nhiên, phiên bản Java mới nhất đã giải quyết được các nút thắt về hiệu suất ở một mức độ lớn.
Tóm tắt :
- Dạng đầy đủ của JVM là Máy ảo Java. JVM trong Java là công cụ điều khiển Mã Java. Nó chuyển đổi Java bytecode thành 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, mã Java được biên dịch thành bytecode. Bytecode này được thông dịch trên các máy khác nhau
- JIT là viết tắt của Just-in-time compiler. JIT là một phần của Máy ảo Java (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ể chạy chậm.