JVM là gì? Giải thích về JVM. Archikiến trúc
⚡ Tóm tắt thông minh
Java Máy ảo Java (JVM) là công cụ cung cấp môi trường thời gian chạy để vận hành. Java Mã này chuyển đổi mã bytecode độc lập với nền tảng thành ngôn ngữ máy gốc. Nó là một phần của... Java Môi trường thời gian chạy và cho phép JavaTính năng ghi một lần, chạy ở mọi nơi của nó.
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ực thi (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, Java Trình biên dịch tạo ra mã cho một 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 mã byte. Mã byte 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à... Java Mã nguồn, bytecode là ngôn ngữ trung gian. JVM trong Java chịu trách nhiệm phân bổ không gian bộ nhớ.
Làm việc của Java Máy ảo (JVM)
Archikiến trúc của JVM (Java Máy ảo)
Bây giờ, chúng ta hãy cùng tìm hiểu kiến trúc của JVM. Kiến trúc JVM trong Java Bao gồm trình nạp lớp, vùng nhớ, công cụ thực thi, và nhiều hơn nữa.
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 hằng số thời gian chạy 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 Các ngăn xếp ngôn ngữ lưu trữ các biến cục bộ và kết quả một phần của chúng. 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 ra mỗi khi 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 được thực thi. Trong JavaMỗi luồng có thanh ghi PC riêng biệt.
6) Ngăn xếp phương thức gốc
Ngăn xếp phương thức gốc chứa các 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ì ngôn ngữ gốc. Java.
7) Công cụ thực thi
Bộ xử lý thực thi đọc mã bytecode và thực thi từng phần. Nó sử dụng trình thông dịch và trình biên dịch Just-In-Time (JIT) để chuyển đổi mã bytecode thành mã máy gốc và chạy nó.
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ã nguồn chạy trong JVM để gọi và được gọi bởi các ứng dụng và thư viện gốc.
9) Thư viện phương thức gốc
Native Libraries là một bộ sưu tập các thư viện bản địa (C, C++) mà Công cụ thực thi cần thiết.
Phần mềm Code Quá trình biên dịch và thực thi
Để 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, bạn có thể sử dụng Notepad.
- 2) Trình biên dịch – Chuyển đổi chương trình ngôn ngữ cấp 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 tham chiếu tệp chương trình khác nhau trong chương trình chính của bạn lại với nhau.
- 4) Trình tải – Để tải các tệp từ thiết bị lưu trữ phụ của bạn như ổ cứng, ổ flash hoặc đĩa CD vào RAM để thực thi. Quá trình tải được thực hiện tự động khi bạn chạy mã.
- 5) Thi hành – Việc thực thi mã lệnh thực tế, được điều khiển bởi hệ điều hành và bộ xử lý của bạn.
Với kiến thức nền tảng này, hãy xem video sau đây để tìm hiểu về hoạt động bên trong và kiến trúc của JVM (Java Máy ảo).
Nhấp chuột đâ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 Trước tiên, chúng ta hãy cùng xem qua quá trình biên dịch và liên kết trong ngôn ngữ C.
Giả sử trong hàm chính 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 tin 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 tin đối tượng tương ứng, chính 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 tải sẽ tải tệp .exe vào... RAM để thi hành.
Java Biên dịch và thực thi mã trong Java VM
Bây giờ, chúng ta hãy xem xét quy trình để JavaTrong chương trình chính của 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 ba tệp .class tương ứng, bao gồm mã BYTE. Khác với C, không có quá trình liên kết nào được thực hiện.
Java VM, vàng Java Máy ảo nằm trên bộ nhớ RAM. Trong quá trình thực thi, sử dụng trình tải lớp, các tập tin lớp được đưa vào RAM. Mã BYTE được kiểm tra để phát hiện bất kỳ lỗ hổng bảo mật nào.
Tiếp theo, công cụ thực thi sẽ chuyển đổi mã bytecode thành mã máy gốc. Đây là quá trình biên dịch tức thời (just-in-time compiling). Đây là một trong những lý do chính tại sao... Java là tương đối chậm.
LƯU Ý: JIT, hay trình biên dịch Just-in-time, là một phần của... Java Máy ảo Java (JVM). Nó diễn giải các phần của mã byte có chức năng tương tự nhau 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, ví dụ: C++, Java
- Các ngôn ngữ lập trình trình độ trung cấp, ví dụ như C.
- Ngôn ngữ cấp thấp, ví dụ: Assembly
- Cuối cùng, 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 chương trình từ cấp độ ngôn ngữ này sang cấp độ ngôn ngữ khác. Ví dụ, việc chuyển đổi một chương trình từ một cấp độ ngôn ngữ này sang cấp độ ngôn ngữ khác. C++ chương trình thành mã máy. Java trình biên dịch chuyển đổi cấp cao Java mã thành bytecode (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 ở cấp độ này sang một ngôn ngữ lập trình khác ở cấp độ khác. cùng đẳng cấpVí dụ, sự chuyển đổi của một Java chương trình vào C++.
In JavaBộ tạo mã Just-In-Time chuyển đổi mã bytecode thành mã máy gốc, ở cùng cấp độ lập trình. Do đó, Java Nó vừa là ngôn ngữ biên dịch, vừa là ngôn ngữ thông dị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 là:
- 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.
- 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 này càng làm chậm tốc độ hơn nữa.
Tuy nhiên, các phiên bản mới nhất của Java đã giải quyết được phần lớn những điểm nghẽn về hiệu năng này.












