Backend

99 Ngày Java — Ngày 01: Java là gì? JVM, JDK và JRE

SSite Admin
29 tháng 07, 2026 3 phút đọc 1230 lượt xem
99 Ngày Java — Ngày 01: Java là gì? JVM, JDK và JRE

Chào mừng bạn đến với 99 Ngày Java — hành trình mỗi ngày một chủ đề, từ con số 0 đến khi tự tin viết ứng dụng Java thực thụ. Ngày đầu tiên, chúng ta trả lời câu hỏi căn bản nhất: Java là gì, nó chạy như thế nào, và bộ ba JVM – JRE – JDK khác nhau ra sao. Đây là nền móng mà mọi buổi phỏng vấn Java đều hỏi tới.

Sketchnote Ngày 01: Java là gì? JVM, JDK và JRE

Java là gì?

Java ra đời năm 1995 tại Sun Microsystems (nay thuộc Oracle), cha đẻ là James Gosling. Gần 30 năm sau, Java vẫn nằm trong nhóm ngôn ngữ phổ biến nhất thế giới, là xương sống của backend doanh nghiệp, hệ thống ngân hàng, thương mại điện tử và cả ứng dụng Android.

  • Hướng đối tượng — mọi thứ xoay quanh class và object (học kỹ từ ngày 11).

  • Kiểu tĩnh — biến phải khai báo kiểu, compiler bắt lỗi ngay khi biên dịch.

  • WORAWrite Once, Run Anywhere: viết một lần, chạy trên mọi hệ điều hành.

Bí quyết của WORA nằm ở chỗ: Java không chạy trực tiếp trên máy thật, mà chạy trên một máy ảo gọi là JVM.

Java chạy như thế nào?

Hãy nhìn chương trình Java đầu tiên của series (ngày mai chúng ta sẽ mổ xẻ từng dòng):

public class Hello {
    public static void main(String[] args) {
        System.out.println("Xin chào, 99 Ngày Java!");
    }
}

Từ file mã nguồn đến lúc chạy được, code đi qua hai bước:

javac Hello.java   # biên dịch → Hello.class (bytecode)
java Hello         # JVM nạp bytecode và thực thi

Hello.class chứa bytecode — một ngôn ngữ trung gian không phụ thuộc hệ điều hành. Cùng một file bytecode có thể chạy trên Windows, Linux hay macOS, miễn là máy đó có JVM. Khi chạy, JVM còn có JIT compiler dịch những đoạn bytecode được gọi nhiều thành mã máy để tăng tốc — vì vậy Java càng chạy lâu càng nhanh.

Ly cà phê — biểu tượng quen thuộc của ngôn ngữ Java

JVM, JRE và JDK khác nhau thế nào?

Ba khái niệm này lồng vào nhau như búp bê Nga: JDK ⊃ JRE ⊃ JVM.

  • JVM (Java Virtual Machine) — trái tim: nạp và thực thi bytecode, quản lý bộ nhớ và garbage collection.

  • JRE (Java Runtime Environment) — JVM + thư viện chuẩn (String, List, IO…). Đủ để chạy ứng dụng.

  • JDK (Java Development Kit) — JRE + công cụ phát triển: javac (compiler), jdb (debugger), javadoc… Đủ để viết ứng dụng.

Quy tắc nhớ nhanh: lập trình viên luôn cài JDK. Từ Java 11 trở đi, Oracle không phát hành JRE riêng nữa — cài JDK là có tất cả.

Cài đặt JDK 21

Series này dùng Java 21 — bản LTS (Long-Term Support) được hỗ trợ dài hạn và là chuẩn của các framework hiện đại như Spring Boot 3. Bạn có thể tải Eclipse Temurin (miễn phí, khuyến nghị) tại adoptium.net hoặc Oracle JDK tại oracle.com. Cài xong, mở terminal và kiểm tra:

$ java -version
openjdk version "21.0.4" 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode)

Nếu lệnh trên in ra phiên bản 21.x là bạn đã sẵn sàng. Trên Windows, nhớ kiểm tra biến môi trường JAVA_HOME trỏ đến thư mục cài JDK và PATH chứa %JAVA_HOME%\bin (trình cài đặt Temurin có tùy chọn làm sẵn việc này).

Bài tập nhỏ

  • Cài JDK 21 và chạy java -version thành công.

  • Tự giải thích bằng lời của bạn: bytecode là gì, vì sao Java chạy được mọi nơi?

  • Không nhìn bài viết, vẽ lại sơ đồ JDK ⊃ JRE ⊃ JVM.

Kết luận

Bạn đã nắm được bức tranh lớn: Java biên dịch ra bytecode, JVM thực thi bytecode trên mọi hệ điều hành, và JDK là bộ đồ nghề của lập trình viên. Ngày 02, chúng ta sẽ viết chương trình đầu tiên và mổ xẻ từng thành phần: public static void main thực ra nghĩa là gì? Hẹn gặp lại!

S

Site Admin

Engineer and writer. Building things with TypeScript and distributed systems.

Bình luận (0)

Bạn cần đăng nhập bằng Google để bình luận.

Hãy là người bình luận đầu tiên.

Bài viết liên quan

99 Ngày Spring — Ngày 14: Bean Validation — @Valid & bộ constraint chuẩn

Ngày 14 của 99 Ngày Spring: Bean Validation khai báo luật ngay trên DTO — @Valid kích hoạt, bộ constraint chuẩn (@NotBlank vs @NotEmpty vs @NotNull, @Size, @Email, @Min/@Max), bẫy int vs Integer, validate object lồng nhau không tự lan, và lỗi 400 gom một lượt.

10 thg 8, 20265 phút0
99 Ngày Java — Ngày 14: Kế thừa (Inheritance)

Ngày 14 của 99 Ngày Java: extends trao gia tài từ lớp cha, override với @Override và super., thứ tự khai sinh cha trước con sau qua super(...), protected trả nợ Ngày 13, và phép thử is-a vs has-a — khi nào nên composition thay vì kế thừa.

10 thg 8, 20266 phút0
99 Ngày Spring — Ngày 13: @RequestBody & DTO — đừng công khai entity ra API

Ngày 13 của 99 Ngày Spring: @RequestBody + Jackson deserialize JSON thành object, DTO là hợp đồng API — chặn lỗ hổng mass assignment chiều vào và rò rỉ dữ liệu chiều ra, request/response DTO khác nhau là bình thường, và Jackson annotations tinh chỉnh hợp đồng JSON.

9 thg 8, 20266 phút9