JVM Internals

Class loading, bytecode (javap), JIT compiler (C1/C2/tiered), memory layout (heap/metaspace/stack), garbage collector (G1/ZGC/Parallel), tools chẩn đoán (jstack/jmap/jstat/JFR). Hiểu máy bên dưới để debug khi production đi sai và optimize khi cần.

13 bài · ~280 phútMiễn phí

Nội dung

Danh sách bài học

  1. 01

    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.

    ~25 phút
  2. 02

    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.

    ~14 phút
  3. 03

    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.

    ~14 phút
  4. 04

    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.

    ~27 phút
  5. 05

    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.

    ~25 phút
  6. 06

    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.

    ~28 phút
  7. 07

    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.

    ~15 phút
  8. 08

    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.

    ~14 phút
  9. 09

    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.

    ~20 phút
  10. 10

    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.

    ~21 phút
  11. 11

    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.

    ~20 phút
  12. 12

    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.

    ~22 phút
  13. 13

    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.

    ~35 phút