Tổng quan module — JVM Internals
Bản đồ module JVM Internals: class loading, bytecode, JIT compiler, bố cục bộ nhớ, object layout, garbage collector hiện đại, safepoint và bộ tools chẩn đoán.
Code Java của bạn không chạy trên CPU — nó chạy trên một máy ảo với bộ nạp class riêng, trình biên dịch riêng bật giữa chừng, bộ nhớ tự quản lý và những khoảnh khắc cả thế giới đứng im (stop-the-world) mà GC log không kể hết. Ngày thường bạn không cần biết; ngày production chậm bất thường, OOM lúc 2 giờ sáng, hay "X cannot be cast to X" trên Tomcat — tầng bên dưới này là nơi câu trả lời sống.
Module này mở nắp JVM theo bốn cụm: class loading (nạp class thế nào, vì sao lỗi), thực thi (bytecode → interpreter → C1/C2, các tối ưu và deoptimization), bộ nhớ (heap generational, metaspace, object layout, compressed OOP), và GC + chẩn đoán (ba thuật toán nền, chọn collector theo SLA, G1/ZGC/Shenandoah, safepoint, jcmd/JFR). Mục tiêu: khi production đi sai, bạn biết hỏi đúng câu và đọc đúng log.
Bản đồ module
flowchart TD
A["Class loading<br/>01 - 01b - 01c"] --> B["Bytecode va javap<br/>02 - 03"]
B --> C["JIT compiler<br/>04 - 04b - 04c"]
C --> D["Escape analysis<br/>10"]
E["Bo nho JVM<br/>05 - 05b"] --> F["Object layout<br/>09 - 09b"]
E --> G["GC + chon collector<br/>06 - 06b"]
G --> H["G1 / ZGC / Shenandoah<br/>12 - 12b"]
G --> I["Safepoint va STW<br/>11"]
J["Tools chan doan<br/>07 - 08"] --> K["13. Mini-challenge<br/>debug memory leak"]Bạn sẽ đạt được gì
Học xong module này, bạn có thể:
- Explain cách JVM nạp class qua hierarchy ba tầng và parent delegation
- Diagnose lỗi classloading trong container: ClassNotFoundException vs NoClassDefFoundError và "X cannot be cast to X"
- Trace cấu trúc class file và bytecode một method bằng javap — từ constant pool tới invokedynamic
- Trace đường biên dịch một method từ interpreter qua C1/C2 cùng các tối ưu inlining, devirtualization, escape analysis
- Diagnose độ trễ sau deploy bằng JIT log — phân biệt deoptimization với warm-up
- Explain bố cục bộ nhớ JVM (heap generational, metaspace, stack, native) và chữ ký lỗi bộ nhớ từng vùng
- Explain object layout (header, mark word, field packing, compressed OOP) để ước lượng footprint object
- Explain nguyên lý GC (reachability, ba thuật toán nền, generational) và cơ chế sâu G1, ZGC, Shenandoah
- Justify lựa chọn GC collector bằng latency SLA và bằng chứng GC log
- Diagnose pause STW dài hơn GC log báo cáo qua safepoint/TTSP và verify bằng JFR + CLI tools
Cần chuẩn bị trước
- Đã học xong hai module đầu của course — đặc biệt Concurrency cơ bản (thread, lock — xuất hiện lại ở safepoint và GC concurrent) và biết dùng terminal để chạy
java/javapvới flag. - Không cần biết trước C/C++ hay assembly — mọi cấu trúc nội bộ đều được vẽ và giải thích tại chỗ.
Lộ trình bài học
| Bài | Nội dung |
|---|---|
| 01. Class loader | Hierarchy ba tầng + parent delegation |
| 01b. Vòng đời class | Load → link → initialize; CNFE vs NoClassDefFoundError |
| 01c. Classloader isolation | "X cannot be cast to X" trong Tomcat/Spring Boot |
| 02. Class file và javap | Magic number, constant pool, đọc bytecode |
| 03. invoke và invokedynamic | Bốn lệnh invoke + cơ chế đằng sau lambda |
| 04. JIT tiered compilation | Interpreter → C1 → C2, counter, OSR |
| 04b. Inlining và devirtualization | Inline cache, type profile |
| 04c. Deopt, JIT log và warm-up | Uncommon trap, đọc JIT log, CDS/AOT |
| 05. Heap generational | Eden/Survivor/Old, bump-the-pointer, TLAB |
| 05b. Ngoài heap | Metaspace, stack, native + chữ ký OOM từng vùng |
| 06. Garbage collection nền tảng | Reachability, ba thuật toán, generational |
| 06b. Chọn collector, đọc GC log | Chọn theo SLA + xác nhận bằng log |
| 07. CLI tools | jcmd, jstat, jmap, jstack |
| 08. JFR và profiling | Java Flight Recorder, overhead thấp |
| 09. Object header | Mark word, field layout, JOL |
| 09b. Compressed OOP | Encoding và 32GB cliff |
| 10. Escape analysis | Scalar replacement, lock elision |
| 11. Safepoint và STW | Vì sao pause dài hơn GC log báo cáo |
| 12. G1 deep | Region, SATB, RSet, humongous, tuning |
| 12b. ZGC và Shenandoah | Colored pointer, read vs write barrier |
| 13. Mini-challenge | Debug memory leak thật bằng cả bộ tool |
Bài tiếp theo: Class loader — hierarchy ba tầng và parent delegation
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên