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

Java là một ngôn ngữ lập trình bậc cao. Một chương trình bậc cao không thể chạy trực tiếp trên bất kỳ máy nào! Vậy nên chúng ta cần compiler code thì mới chạy được nhé.

Như bài giới thiệu trước, JVM là một máy ảo được cài đặt trên máy thật của chúng ta. JVM sẽ thực thi những đoạn byte code được biên dịch từ JDK. JVM là một trong những thành phần quan trọng làm cho java trở thành một nền tảng độc lập.

Quá trình biên dịch code java

Nhìn vào hình trên, chúng ta thấy Source code chúng ta viết sẽ được biên dịch thành bytecode thông qua javac. bytecode chúng ta có được sau quá trình biên dịch có thể chạy trên bất kỳ hệ điều hành nào nhờ vào JVM.

Nhiệm vụ của JVM

JVM có hai chức năng chính:

  • Cho phép ứng dụng Java có thể chạy trên bất kỳ thiết bị hoặc hệ điều hành bấy kỳ – “Write once, run anywhere”.
  • Quản lý và tối ưu memory cho ứng dụng.

Trước đây, trước khi Java được ra mắt vào năm 1995, tất cả các ứng dụng phải chạy trên hệ điều hành cụ thể và memory được quản lý bởi các nhà phát triển. JVM xuất hiện mang đến một khái niệm mới về phát triển phần mềm.

Các ứng dụng giờ đây chỉ cần phát triển một phiên bản duy nhất và có thể chạy trên nhiều hệ điều hành khác nhau nhờ vào công nghệ JVM. Tương ứng với mỗi hệ điều hành sẽ có một JVM khác nhau nhưng điểm chung là nó đều có thể chạy được cùng một mã nguồn. Do vậy, ứng dụng chỉ cần phát triển một phiên bản và độc lập với hệ điều hành.

Kiến trúc JVM

JVM Architecture

JVM Architecture:

  • Class loader: Đọc các file .class và lưu chúng dưới dạng byte code trong method area.
  • Method Area: Chia sẽ cho các thread, được tạo khi JVM start-up. Method area chứ class reference, các runtime constant poolm mã bytecode, cho từng class và interface.
  • Heap: Là một phần của JVM memory nơi các object được phân bổ. JVM tạo một class object cho mỗi file .class.
  • Stack: Stack cũng là một phần của JVM memory, không giống như Heap, Stack được sử dụng để lưu trữ các biến tạm thời.
  • PC Registers: Theo dõi các lệnh nào đã được thực thi rồi, các lệnh nào chưa được thực thi. Mỗi thread có một PC Register riêng.
  • Native method stack: Một method native có thể truy cập các vùng data runtime của virtual machine.
  • Native method interface: Cho phép java code call hoặc bị call bởi ứng dụng gốc. 
  • Garbage collection: Các instace được tạo ra bởi java code sau khi được sử dụng sẽ được Garbage collection phá huỷ để quản lý bộ nhớ.

JRE là gì?

JRE (Java Runtime Environment) tạo JVM và đảm bảo các dependencies đã sẵn sàng cho các chương trình Java của bạn. Chúng ta có thể hiểu rằng runtime environment như là một ứng dụng được thiết kế để chạy các ứng dụng khác dựa trên nó. Là runtime environment cho Java, JRE chứa Java class libraries, the Java class loader, và JVM, trong hệ thống này:

  • Class loader chịu trách nhiệm tải các class và kết nối chúng với các thư viện Java core.
  • JVM chịu trách nhiệm đảm bảo ứng dụng Java có đủ tài nguyên để chạy trên các hệ điều hành và thiết bị khác nhau.
  • JRE là một bộ phận chịu trách nhiệm điều phối các hoạt động của khác.

JDK là gì?

JDK (Java Development Kit) là một trong 3 công nghệ cốt lõi để phát triển một ứng dụng Java cùng với JVM và JRE. JDK cho phép các nhà phát triển tạo các ứng Java có thể được thực thi và chạy bởi JVM và JRE. 

JDK cung cấp một bộ công cụ, thư viện cần thiết để phát triển các ứng dụng Java. Bạn cần JDK để chuyển đổi mã nguồn của mình thành định dạng mà JRE có thể thực thi. Nó bao gồm JRE, interpreter (java),  compiler (javac), archiver (jar), a documentation generator (javadoc) và một số công cụ phát triển khác.

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

JRE là môi trường cho máy ảo java (JVM) chạy. JRE chứ JVM, class libraries etc. Với JRE chúng ta có thực run code nhưng không thể develop và compile.

JVM thực thi chương trình sử dụng class, libraries, các tập tin được cung cấp bởi JRE.

JDK chứa JRE cà các công cụ phát triển như trình biên dịch, trình gỡ lỗi etc.

Nguồn tham khảo

https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html

https://www.infoworld.com/article/3304858/what-is-the-jre-introduction-to-the-java-runtime-environment.html

https://www.infoworld.com/article/3296360/what-is-the-jdk-introduction-to-the-java-development-kit.html

https://www.educative.io/edpresso/what-is-the-java-development-kit-jdk

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x