# Lời tựa
Tôi viết series này để chia sẻ quá trình học Java của mình.
# 1. Java Development Kit (JDK)
Là 1 bộ công cụ lập trình Java hoàn chỉnh bao gồm toàn bộ mọi thứ bao gồm:
- Compiler (Javac)
- Java Runtime Environment (JRE)
- Java Debuggers
- Java documentation generator (Javadoc)
- Archiver (jar)
# 2. Java Virtual Machine (JVM)
> Xem thêm về JVM: https://www.geeksforgeeks.org/jvm-works-jvm-architecture/
Chúng ta có 3 giai đoạn để thực thi 1 chương trình Java:
+ *Giai đoạn 1*: Viết chương trình Java (được thực hiện bởi lập trình viên java như chúng ta).
+ *Giai đoạn 2*: Trình biên dịch (compiler) **JAVAC** sẽ thực hiện biên dịch chương trình. **JAVAC** là trình biên dịch chính của Java, nó được tích hợp sẵn trong Java Development Kit (JDK). **JAVAC** lấy chương trình Java để làm input và tạo ra output là bytecode tương ứng.
+ *Giai đoạn 3*: Trong giai đoạn chạy chương trình, **JVM** thực thi các bytecode đã được tạo ra bởi trình biên dịch **JAVAC**.
# 3. Bytecode
Như đã nói ở trên, trình biên dịch JAVAC của JDK biên dịch mã nguồn java thành bytecode và làm tiền đề để JVM thực thi bytecode đó.
Trình biên dịch JAVAC lưu bytecode dưới dạng 1 file `.class`
Để xem bytecode, 1 trình dịch ngược (disassembler) như `javap` có thể sử dụng.
> Xem thêm về javap: https://www.geeksforgeeks.org/javap-tool-in-java-with-examples/
# 4. Java Runtime Environment (JRE)
Là gói cài đặt cung cấp môi trường để chỉ chạy (tức không dùng để phát triển) chương trình java trên máy của bạn.
JRE thường chỉ được sử dụng bởi các end-user (hay người sử dụng).
# 5. ClassPath
ClassPath là 1 đường dẫn file nơi mà Java Runtime và Java Compiler tìm tới các file `.class` để thực thi.
Mặc định JDK đã cung cấp rất nhiều thư viện. Nếu muốn thêm các thư viện bên ngoài thì ta phải thêm classpath.
> Xem thêm về ClassPath: https://www.geeksforgeeks.org/classpath-in-java/
# 6. Garbage Collector
Trong Java, lập trình viên không thể xóa các object. Thay vào đó, JVM có 1 chương trình gọi là Garbage Collector dùng để thực hiện việc này
# Kết bài
Cảm ơn bạn đã đọc tới đây. Sang phần sau tôi sẽ nói về 3 khái niệm mà người mới học dễ bị nhầm lẫn đó là JDK, JVM và JRE.
# Tham khảo
- https://www.geeksforgeeks.org/introduction-to-java/?ref=lbp