Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the wordpress-seo domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vinascript/html/wp-includes/functions.php on line 6114
Thế nào là Java Virtual? Tại sao sử dụng Virtual trong Java - VinaScript

Latest Post

Triển khai dự án PHP, Mysql với Nginx trên Docker Tìm hiểu về HTML – Ưu điểm, nhược điểm và cách hoạt động của HTML

Java virtual machine là gì?

Được viết tắt là JVM – một trong những yếu tố quan trọng nhất của ngôn ngữ lập trình. Sử dụng để thực thi các chương trình Java hay còn gọi là trình thông dịch Java. Code Java sẽ được cung cấp môi trường để thực thi. 

Khi biên dịch thì chương trình Java sẽ tạo ra các mã bytecodes. Nếu như hệ điều hành chạy chương trình ứng với một mã máy khác thì đó chính là mã bytecodes.

Ví dụ: Windows thì sẽ được biên dịch dưới dạng exe, Linux dưới dạng .ELF

Mục đích chính của Java virtual machine

  • Mã Java được dịch ra mã máy để có thể chạy trên các hệ điều hành khác
  • Tăng tốc độ
  • Tính bảo mật được tăng cường và tránh source code bị virus

Tại sao cần phải sử dụng virtual trong Java?

Chính là phương tiện để ngôn ngữ lập trình Java có thể chạy ở nhiều môi trường khác nhau. Ngoài ra, virtual machine trong java cũng có khả năng duy trì và tối ưu hóa bộ nhớ chương trình. Trước đây, các chương trình chỉ chạy trên một nền tảng cụ thể nào đó, còn đối với code java thì tương thích với đa nền tảng và hầu hết các hệ điều hành khác nhau.

luong-java-virtual-voi-nguoi-dung

Luồng Java Virtual với người dùng

Có hai luồng hiểu về JVM đối với người dùng:

Thứ nhất, java virtual machine là chương trình phần mềm cung cấp môi trường cho code java thực hiện.

Thứ hai, java virtual machine được sử dụng cài đặt cấu hình nhằm kiểm soát và quản lý tài nguyên java trong quá trình thực hiện.

Kiến trúc của JVM

Java được cấu tạo từ nhiều bộ phận khác nhau tương tự như những ngôn ngữ lập trình khác. Những kiến trúc cơ bản ảnh hưởng tới cách thức Java hoạt động:

kien-truc-cua-may-ao-java
Kiến trúc của máy ảo Java
  • Hệ thống phụ của JVM là Classloader, có chức năng tìm kiếm và tải file
  • Lưu trữ các cấu trúc lớp với các type khác nhau để chạy chương trình Java là Method Area
  • Bộ nhớ lưu giữ Object, biến đối tượng liên quan và mảng (Array) là Heap
  • JVM language Stacks được sử dụng để lưu trữ các biến cục bộ. Tất cả các luồng sẽ có JVM stacks riêng và được tạo ra cùng thời điểm luồng.
  • Địa chỉ của các JVM đang thực thi lệnh của PC register. Với ngôn ngữ Java mỗi luồng sẽ có PC register riêng. 
  • Native Method Stack bằng cách sử dụng thư viện gốc đã được lưu trữ các lệnh của code gốc và viết bằng nhiều ngôn ngữ khác nhau ngoài Java.
  • Execution Engine được xem như một phần mềm dùng để kiểm tra phần mềm, phần cứng, hoặc hệ thống hoàn chỉnh. 
  • Native Method interface là Framework cho phép code Java chạy trong Java virtual machine (JVM).
  • Native Methods Libraries là tập hợp bao gồm các thư viện riêng: C, C ++ nhằm phục vụ cho Execution Engine (công cụ thực thi).

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

Tước hết, để có thể viết và thực hiện chương trình phần mềm thì bạn cần những điều sau đây:

  1. Editor – Có thể sử dụng notepad cho trình biên dịch, để nhập chương trình vào
  2. Compiler – Để chuyển đổi chương trình ngôn ngữ cao thành mã máy gốc
  3. Linker – Để kết hợp mọi tệp khác nhau trong chương trình chính với nhau.
  4. Loader – Để tải các tệp từ thiết bị lưu trữ thứ cấp như: Đĩa cứng, Flash Drive, CD vào RAM để thực hiện. Khi thực hiện mã thì việc tải sẽ theo hình thức tự động.
  5. Execution – Thực hiện mã được xử lý bởi hệ điều hành & bộ xử lý.

Cơ chế thực hiện

  • Classloader tìm và load các file .class sau đó file này sẽ được máy ảo JVM( Java virtual machine), bộ nhớ sẽ được cung cấp.
  • Class (Method) area: đây được gọi là vùng nhớ cấp phát cho class (Method). Thông thường được phân chia thành các heap, stack, PC register, native method stack
  • Heap: Đây là nơi các dữ liệu thời gian chạy trong đó mọi đối tượng được phân bổ.
  • Stack : Tham chiếu các phương thức tới đối tượng được lưu trữ trong Stack. Mỗi Thread thì sẽ quản lý một stack. Khi được gọi thì các phương thức sẽ đưa vào đỉnh của Stack. Trạng thái của phương thức sẽ được lưu trữ tại đây bao gồm: code thực thi, tham chiếu tới đối tượng địa phương. Sau khi chạy trong phương thức, vùng nhớ (dòng code 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.
  • PC register (Program Counter Register): chứa địa chỉ của các máy ảo Java hướng dẫn hiện đang được thực hiện.
  • Native Method Stack: bao gồm tất cả các method native trong một chương trình
  • Execution Engine: bao gồm bộ xử lý ảo, một phiên dịch để đọc dòng bytecode. Tiếp theo là thực hiện theo hướng dẫn và cuối cùng sẽ là trình biên dịch Just-In-Time (JIT). JIT thực hiện nhiệm vụ biên dịch các phần của mã byte có chức năng tương tự trong cùng một lúc.  Cũng bởi vậy mà làm giảm số lượng thời gian cần thiết cho compilation.

Biên dịch và thực hiện mã trong Java virtual machine

Trong main có hai method là f1 và f2, được thể hiện như sau:

trinh-bien-dich-ma-trong-jvm

Trình biên dịch mã trong JVM

Lỗi của Java virtual machine

Khi xuất hiện lỗi JVM thì máy tính sẽ không thể đọc và hiểu code Java. Một trong những lỗi thường gặp nhất trong quá trình khởi chạy JVM đó là do các thành phần bắt buộc không có sẵn. Ví dụ như khi bắt đầu khởi động có một lớp bắt buộc nào đó không xuất hiện thì JVM sẽ lập tức báo lỗi để cảnh báo tới người dùng. Lỗi này sẽ được minh họa trong hình ảnh dưới dây:

Tổng kết

Trên đây là những kiến thức và thông tin cụ thể về Java Virtual Machine (JVM). Hy vọng thông qua bài viết trên bạn đã có cái nhìn đơn giản và hiểu biết về Java virtual machine là gì? Những ứng dụng nó hiệu quả trong lập trình. Nếu bạn có thắc mắc về Java Virtual Machine (JVM) hay muốn tìm hiểu thêm về những kiến thức liên quan đến máy ảo, hãy để lại ở bên bình luận bên dưới, CodeGym Hà Nội sẽ hỗ trợ, phản hồi bạn trong thời gian sớm nhất.

Chúc bạn thành công!

2 thoughts on “Thế nào là Java Virtual? Tại sao sử dụng Virtual trong Java

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *