The JVM in Depth
Class loading, the JVM's memory areas, garbage collectors (G1, ZGC, Shenandoah), the JIT compiler, jcmd/jstack/JFR, and everyday performance pitfalls.
Up to now the Java Virtual Machine (JVM) has been the quiet machine underneath your code: you write classes, it runs them. This phase opens the machine. You'll see how a .class file becomes a live class in memory, where every byte of a running program lives, how the garbage collector finds and frees dead objects without stopping the world for long, how the JIT compiler turns hot bytecode into machine code that can beat hand-written C, and how to look inside a running JVM with jcmd, jstack, jmap and Java Flight Recorder.
Topic 14.1 covers class loading: loaders, delegation, linking and the exact moment a class is initialised. Topic 14.2 maps the memory areas: heap, stacks, Metaspace, the code cache and direct memory, and which OutOfMemoryError each one throws. Topic 14.3 explains garbage collection: reachability, generations, and the collectors you'll meet (Serial, Parallel, G1, ZGC, Shenandoah). Topic 14.4 is the JIT: tiered compilation, inlining, escape analysis and deoptimisation. Topic 14.5 is the tool kit for diagnosing a live process, and Topic 14.6 collects the performance pitfalls that show up again and again in real code reviews.
This is the phase that turns "it's slow" or "it ran out of memory" into a diagnosis. Runnable examples print the same output every time, so they show the rules (initialisation order, reachability, cache sizes, algorithmic cost) rather than timings. Real tool output (GC logs, thread dumps, jcmd reports) varies from machine to machine, so it appears as labelled sample output you can compare with your own. Topic 0.8 gave the short tour; this phase is the full one.