OLHub

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.

11 bài · ~276 phútMiễn phí

Nội dung

Danh sách bài học

  1. 01

    Class loader — load, link, init và parent delegation

    Class JVM nạp khi nào, qua tầng nào, và vì sao Tomcat / Spring Boot fat jar có ClassLoader riêng. Hiểu 3 phase load/link/init, hierarchy Bootstrap → Platform → App, parent delegation và 2 lỗi anh em ClassNotFoundException vs NoClassDefFoundError.

    ~25 phút
  2. 02

    Bytecode và javap — đọc instruction JVM

    JVM là máy stack-based, không phải register-based như x86. Bytecode là tập opcode 1 byte JVM thực thi. javap dump bytecode để debug compile, hiểu lambda, decompile để verify optimize. 5 invoke* opcode và lý do invokedynamic là cách mạng.

    ~25 phút
  3. 03

    JIT compiler — interpreter, C1, C2, tiered compilation

    Bytecode chậm, native code nhanh. JVM bắt đầu bằng interpreter, đo hot method, escalate lên C1 (fast compile), rồi C2 (deep optimize). Inlining, escape analysis, deoptimization. Vì sao Java warm-up vài giây mới đạt peak performance.

    ~27 phút
  4. 04

    Memory layout — heap, metaspace, stack, object header

    Đối tượng Java sống ở đâu, header chiếm bao nhiêu byte, vì sao Integer 16 byte mà int 4 byte. Heap young/old generation, metaspace cho class metadata, stack cho frame method, native memory cho buffer ngoài heap. 4 loại OOM khác nhau.

    ~25 phút
  5. 05

    Garbage Collection — G1, ZGC, Parallel và cách chọn

    GC làm gì, tại sao Java không cần free thủ công. Generational hypothesis, mark-sweep-compact, copying. 3 collector chính: Parallel (throughput), G1 (default modern), ZGC (low-latency sub-ms). Khi nào chọn cái nào, đọc GC log thế nào.

    ~28 phút
  6. 06

    JVM tools — jstack, jmap, jstat, JFR và async-profiler

    Toolkit chẩn đoán production: jps liệt kê process, jstack thread dump deadlock, jmap heap dump leak, jstat metric realtime, jcmd Swiss-army knife, JFR profiling overhead <1%, async-profiler flame graph CPU/alloc. Workflow debug từ symptom đến root cause.

    ~28 phút
  7. 07

    Object Header và Compressed OOP — tại sao mỗi object Java tốn ít nhất 16 byte

    Mark word, klass pointer, field layout, padding, và compressed OOP: cơ chế giúp JVM tiết kiệm 30-50% heap. Hiểu 32GB cliff anti-pattern và cách dùng JOL để đo đạc.

    ~20 phút
  8. 08

    Escape Analysis và Scalar Replacement — khi JIT xoá object trước khi bạn tạo nó

    Escape analysis phân tích object có thoát khỏi method không. Nếu không, JIT scalar-replace, elide lock, giảm GC pressure về 0 cho object đó. Cơ chế, pitfall, và cách verify.

    ~21 phút
  9. 09

    Safepoint và Stop-The-World — tại sao GC pause dài hơn GC log báo

    Safepoint là điểm JVM dừng thread để thực hiện global operation. Cơ chế polling, time-to-safepoint, STW pause, và cách diagnose TTSP spike bằng JFR và safepoint log.

    ~20 phút
  10. 10

    GC Modern Deep — G1, ZGC, Shenandoah: cơ chế, tradeoff và khi nào chọn

    Đào sâu 3 GC hiện đại: G1 region-based SATB, ZGC colored pointer và load barrier, Shenandoah Brooks pointer. Write barrier vs read barrier. Khi nào chọn GC nào cho latency và throughput.

    ~22 phút
  11. 11

    Mini-challenge: Debug memory leak với heap dump và JFR

    Bài thực hành khép lại Module 12 — đọc app có leak, dùng jstat phát hiện trend, jcmd dump heap, MAT phân tích retained, fix root cause với data structure phù hợp. Workflow production-grade từ symptom đến fix.

    ~35 phút