Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

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

Ba thành phần JDK, JRE và JVM có mối quan hệ chặt chẽ và phụ thuộc lẫn nhau, nên trình bày dưới dạng bảng so sánh đơn thuần chưa đủ. Dưới đây là phân tích chi tiết từng thành phần:

JVM (Java Virtual Machine)

JVM là viết tắt của Java Virtual Machine - một đặc tả (specification) cung cấp môi trường chạy (runtime environment) để thực thi Java bytecode. JVM là thành phần trừu tượng, việc triển khai cụ thể (implementation) do các nhà cung cấp như Oracle, IBM, Azul... quyết định thuật toán.

Chức năng chính của JVM:

  • Nạp code (Load code)
  • Xác thực code (Verify code)
  • Thực thi code (Execute code)
  • Cung cấp môi trường chạy (Provide runtime environment)

JVM chịu trách nhiệm chuyển đổi bytecode thành mã máy phụ thuộc nền tảng (machine-specific code). Ngoài ra, JVM cũng có thể chạy các chương trình viết bằng ngôn ngữ khác (Kotlin, Scala, Groovy...) miễn là chúng biên dịch thành Java bytecode.

JRE (Java Runtime Environment)

JRE là triển khai cụ thể của JVM. Nó bao gồm JVM cùng với các thư viện lớp (class libraries) và các thành phần hỗ trợ khác cần thiết để chạy ứng dụng Java.

Cấu trúc JRE:

  • Java Virtual Machine (JVM)
  • Thư viện lớp cốt lõi (core libraries: java.lang, java.util, java.io...)
  • Công nghệ triển khai (deployment technologies)
  • Giao diện người dùng (UI toolkits: Swing, JavaFX, AWT)
  • Thư viện ngôn ngữ và tiện ích (lang & util libraries)

Khác với JVM (trừu tượng), JRE tồn tại vật lý trên đĩa cứng sau khi cài đặt.

JDK (Java Development Kit)

JDK là bộ công cụ phát triển Java đầy đủ, bao gồm mọi thứ cần thiết để biên dịch, gỡ lỗi (debug) và chạy chương trình Java.

JDK bao gồm:

  • JRE (do đó bao gồm cả JVM)
  • Công cụ phát triển: javac (compiler), java (launcher), javadoc, jdb (debugger), jshell, jar, v.v.

JDK phụ thuộc nền tảng (platform-dependent) - có bộ cài đặt riêng cho Windows, macOS, Linux. Phiên bản JDK đại diện cho phiên bản Java (ví dụ: JDK 17, JDK 21).

Bảng so sánh tóm tắt

STT Tiêu chí JDK JRE JVM
1 Định nghĩa Bộ công cụ phát triển phần mềm Java. Bao gồm JRE + công cụ dev (compiler, debugger, javadoc...). Môi trường chạy Java. Triển khai của JVM + thư viện lớp + thành phần hỗ trợ để chạy app Java. Máy ảo trừu tượng, có 3 khái niệm: specification (tài liệu), implementation (chương trình), instance (thực thi bytecode).
2 Chức năng chính Phát triển: biên dịch, debug, đóng gói, chạy. Tạo môi trường chạy cho code thực thi. Chỉ định các triển khai, cung cấp môi trường chạy bytecode cho JRE.
3 Phụ thuộc nền tảng Phụ thuộc (platform-dependent). Phụ thuộc (platform-dependent). Độc lập (platform-independent) ở mức specification.
4 Công cụ đi kèm Có đầy đủ: compiler, debugger, monitoring tools... Không có compiler/debugger. Chỉ có thư viện lớp và file hỗ trợ JVM chạy. Không bao gồm công cụ phát triển.
5 Mối quan hệ JDK = JRE + Development Tools JRE = JVM + Libraries JVM = Chỉ môi trường chạy bytecode

Mối quan hệ dễ nhớ

JDK ⊃ JRE ⊃ JVM
(JDK chứa JRE, JRE chứa JVM)