Nội dung
Danh sách bài học
- 01~25 phút
Class loader — load, link, init và parent delegation
ClassLoader JVM: 3 phase load/link/init, hierarchy Bootstrap → Platform → App, parent delegation, và vì sao ClassNotFoundException khác NoClassDefFoundError.
- 02~14 phút
Class file và javap — đọc instruction JVM từ binary
Class file binary (magic 0xCAFEBABE, constant pool, bytecode) và JVM máy stack-based; dùng javap đọc bytecode, operand stack, local slot và method descriptor.
- 03~14 phút
5 lệnh invoke và invokedynamic — method dispatch trong JVM
5 opcode dispatch (invokestatic/special/virtual/interface/dynamic), vtable vs itable, và vì sao lambda + String concat Java 9+ compile thành invokedynamic.
- 04~27 phút
JIT compiler — interpreter, C1, C2, tiered compilation
Tiered compilation interpreter → C1 → C2: counter, OSR, inlining, escape analysis, deoptimization, và vì sao Java cần warm-up mới đạt peak performance.
- 05~25 phút
Memory layout — heap, metaspace, stack, object header
Object Java sống ở đâu: heap young/old, metaspace, stack, native memory; vì sao Integer tốn 16 byte; object header; và 4 loại OutOfMemoryError.
- 06~28 phút
Garbage Collection — G1, ZGC, Parallel và cách chọn
Generational hypothesis, mark-sweep-compact, copying, và 3 collector Parallel/G1/ZGC — cơ chế, pause profile, khi nào chọn cái nào, cách đọc GC log.
- 07~15 phút
CLI tools chẩn đoán JVM — jps, jstack, jmap, jstat, jcmd
Chẩn đoán JVM production không cần restart: jps, jstack (deadlock), jmap (heap dump), jstat, jcmd — workflow từ symptom đến root cause.
- 08~14 phút
JFR và profiling — Flight Recorder, JMC, async-profiler
JFR profiler built-in overhead dưới 1%, JMC phân tích GC/allocation/lock, async-profiler vẽ flame graph CPU với native stack — workflow profiling production.
- 09~20 phút
Object header và Compressed OOP — vì sao object tốn 16 byte
Mark word, klass pointer, field layout, padding và compressed OOP — cơ chế tiết kiệm 30-50% heap, 32GB cliff anti-pattern, và cách đo bằng JOL.
- 10~21 phút
Escape analysis và scalar replacement — khi JIT xoá object
Escape analysis: object không thoát method → JIT scalar-replace + elide lock, giảm GC pressure về 0. Cơ chế, pitfall, và cách verify bằng JMH.
- 11~20 phút
Safepoint và STW — vì sao GC pause dài hơn GC log báo
Safepoint — điểm JVM dừng thread cho global operation: cơ chế polling, time-to-safepoint (TTSP), STW pause, và cách diagnose TTSP spike.
- 12~22 phút
GC modern — G1, ZGC, Shenandoah: cơ chế và khi nào chọn
Đào sâu G1 (SATB, RSet), ZGC (colored pointer, load barrier), Shenandoah (LRB); write vs read barrier; và khi nào chọn GC theo latency/throughput.
- 13~35 phút
Mini-challenge: Debug memory leak với heap dump và JFR
Bài thực hành khép module: debug memory leak thật — jstat phát hiện trend, jcmd dump heap, MAT phân tích retained, fix root cause. Workflow production.