Java Dev 2 - Phân biệt giữa JDK, JVM và JRE

Java Dev 2 - Phân biệt giữa JDK, JVM và JRE

·

4 min read

Lời nói đầu

Như đã nói ở cuối phần 1, phần 2 này tôi sẽ nói về cách phân biệt giữa JDK, JVM và JRE. Nếu bạn không muốn đọc nhiều có thể kéo nhanh xuống phần 5. TLDR.

JDK

JDK (viết tắt của Java Development Kit) là 1 môi trường phát triển phần mềm đa nền tảng (cross-platformed), nó cung cấp 1 tập công cụ và thư viện cần thiết để phát triển phần mềm và ứng dụng dựa trên nền tảng Java.

Người mới thường bị nhẫm lần giữa JDK và JRE. Để dễ dàng hiểu vì sao nó khác nhau thì:

  • Nếu bạn chỉ cần chạy/thực thi (run/excute) được phần mềm hay ứng dụng bằng Java trên máy tính của bạn thì bạn chỉ cần JRE.

  • Nếu bạn muốn phát triển (develop) 1 phần mềm Java thì ngoài JRE bạn còn cần thêm các công cụ cần thiết khác, và JDK cung cấp cho bản cả JREcác công cụ phát triển phần mềm.

Có thể thấy: JDK = JRE + các công cụ lập trình Java khác nhau.

JRE

JRE (viết tắt của Java Runtime Environment) là gói cài đặt cung cấp môi trường chỉ dùng để chạy/không dùng để phát triển (only run/not develop) chương trình java (hoặc ứng dụng) trên máy của bạn.

JRE thường chỉ được sử dụng để chạy ứng dụng Java bởi người dùng cuối (end-user).

JRE trong JDK còn được gọi là Private Runtime bởi nó được tách khỏi JRE thông thường và có thêm các nội dung khác.

Sau đây là 1 số thành phần của JRE:

  1. Các công nghệ lập trình (Deployment technologies): Deployment, Java Web Start, Java Plug-in.

  2. Bộ công cụ làm giao diện người dùng (User interface toolkits): Abstract Window Toolkit (AWT), Swing, Java 2D, Accessibility, Image I/O, Print Service, Sound, Kéo - thả (Drag and Drop) và các phương thức đầu vào (input methods).

  3. Các thư viện tích hợp (Integration libraries): Interface Definition Language (IDL), Java Database Connectivity (JDBC), Java Naming and Directory Interface (JNDI), Remote Method Invocation (RMI), Remote Method Invocation Over Internet Inter-Orb Protocol (RMI-IIOP) và scripting.

  4. Các thư viện cơ sở khác (Other base libraries) including international support, input/output (I/O), extension mechanism, Beans, Java Management Extensions (JMX), Java Native Interface (JNI), Math, Networking, Override Mechanism, Security, Serialization và Java for XML Processing (XML JAXP).

  5. Thư viện cơ sở Lang và util (Lang and util base libraries): bao gồm lang và util, management, versioning, zip, instrument, reflection, Collections, Concurrency Utilities, Java Archive (JAR), Logging, Preferences API, Ref Objects và Regular Expressions.

  6. Java Virtual Machine (JVM): Java HotSpot Client và Server Virtual Machines.

Có thể thấy: JRE = JVM + các thư viện class khác nhau. Xem thêm về JDK và JRE: https://www.geeksforgeeks.org/jdk-in-java/?ref=lbp

JVM

JVM (viết tắt của Java Runtime Machine): là một phần rất quan trọng của cả JDK và JRE vì nó được có sẵn trong cả JDK và JRE.

Bất kỳ chương trình Java nào bạn chạy bằng JRE hoặc JDK đều đi vào JVM và JVM chịu trách nhiệm thực thi (excute) từng dòng chương trình java, do đó nó còn được gọi là trình thông dịch (interpreter).

Minh họa cách thức hoạt động của JDK, JRE, JVM

Cách JDK hoạt động

Khi biên dịch (compile) 1 file .java, các file .class (chứa bytecode) có cùng tên class có trong tệp .java được trình biên dịch Java tạo ra.

Giả sử ta có một file java là Example.java. File được biên dịch thành một bộ bytecode được lưu vào file Example.class.

Compile time

Dưới đây là các hoạt động sau xảy ra trong runtime:

  1. Tải class (Class Loader).

  2. Xác minh Byte Code (Byte Code Verifier)

  3. Thông dịch (Interpreter).

    3.1. Thực thi Byte Code (Execute the Byte Code).

    3.2. Thực hiện các lệnh call thích hợp đến phần cứng (Make appropriate calls to the underlying hardware).

Cách JVM, JRE hoạt động

JVM hoạt động như một runtime engine để chạy các ứng dụng Java. JVM chính là thứ gọi method main trong file Java.

JVM là 1 phần của JRE.

Ứng dụng Java được gọi là WORA (Write Once Run Anywhere). Có nghĩa là một programmer có thể lập trình phần mềm Java trên 1 hệ thống và có thể cho nó chạy trên bất kỳ hệ thống hỗ trợ Java nào khác. JVM chính là thứ làm điều này.

Ở ví dụ trên file Example.class sẽ được đưa vào JVM. Lúc này JVM sẽ thực hiện 3 nhiệm vụ chính:

  1. Loading

  2. Linking

  3. Initialization

Toàn bộ quá trình xử lý trong JVM được miêu tả bằng hình dưới.

5. TLDR:

  • JDK = JRE + các công cụ lập trình Java khác nhau.

  • JRE = JVM + các thư viện class khác nhau.

  • Mối quan hệ giữa ba thứ này là mối quan hệ lồng ghép từng lớp, trong đó: JDK > JRE > JVM.

Kết bài:

Bài cũng kết thúc rồi, cảm ơn các bạn đã đọc tới đây. Có lẽ bài sau tôi sẽ giới thiệu qua 1 chút cú pháp cơ bản trong Java. Hẹn gặp các bạn trong bài viết tới.

Tham khảo: