Java Internals & Concurrency/Tổng quan module — JVM Internals
47/75
Bài 47 / 75~5 phútCó videoJVM InternalsMiễn phí lượt xem

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

Thứ tự bốn cụm không tuỳ ý — nó đi theo đúng đời một class trong JVM: được nạp vào, chạy, chiếm bộ nhớ, rồi bị thu dọn.

Bốn cụm của module xếp theo đời một class: nạp class vào JVM, thực thi bytecode tới JIT, object nằm ở đâu trong bộ nhớ, thu dọn object; cả bốn cụm cùng dẫn vào mini-challenge debug memory leak bằng jcmd, jstat và JFR

Mini-challenge cuối module là chỗ cả bốn cụm gặp nhau trên một ca leak thật — mọi thứ phía trên đều để phục vụ lúc đó.

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/javap vớ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àiNội dung
01. Class loaderHierarchy ba tầng + parent delegation
01b. Vòng đời classLoad → link → initialize; CNFE vs NoClassDefFoundError
01c. Classloader isolation"X cannot be cast to X" trong Tomcat/Spring Boot
02. Class file và javapMagic number, constant pool, đọc bytecode
03. invoke và invokedynamicBốn lệnh invoke + cơ chế đằng sau lambda
04. JIT tiered compilationInterpreter → C1 → C2, counter, OSR
04b. Inlining và devirtualizationInline cache, type profile
04c. Deopt, JIT log và warm-upUncommon trap, đọc JIT log, CDS/AOT
05. Heap generationalEden/Survivor/Old, bump-the-pointer, TLAB
05b. Ngoài heapMetaspace, stack, native + chữ ký OOM từng vùng
06. Garbage collection nền tảngReachability, ba thuật toán, generational
06b. Chọn collector, đọc GC logChọn theo SLA + xác nhận bằng log
07. CLI toolsjcmd, jstat, jmap, jstack
08. JFR và profilingJava Flight Recorder, overhead thấp
09. Object headerMark word, field layout, JOL
09b. Compressed OOPEncoding và 32GB cliff
10. Escape analysisScalar replacement, lock elision
11. Safepoint và STWVì sao pause dài hơn GC log báo cáo
12. G1 deepRegion, SATB, RSet, humongous, tuning
12b. ZGC và ShenandoahColored pointer, read vs write barrier
13. Mini-challengeDebug 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

Đặt 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

Bài tiếp theo

ClassLoader hierarchy — ba tầng và parent delegation