Deep Dive into JVM Tuning: Lessons from "Understanding the JVM" (3rd Edition)
The article shares the author’s experience reading the third edition of "Understanding the JVM," focusing on JVM memory management, garbage‑collection algorithms, tuning strategies, and practical tools, while providing concise summaries of each book section and actionable advice for Java performance optimization.
The author revisits the third edition of "Understanding the JVM" after a busy period of project delivery, using the book as a structured review to deepen knowledge of JVM tuning. The book is divided into five parts; the first and fifth are largely skipped, while the second part—memory management—and the third part—garbage collection—receive detailed attention.
Key memory areas covered include the program counter, JVM stacks, native method stack, heap, method area, runtime constant pool, and direct memory, with emphasis on which regions are thread‑local, which are shared, and how each can cause OutOfMemoryError. Direct memory configuration (e.g., -XX:MaxDirectMemorySize) and its relation to frameworks like Netty are highlighted.
Object creation, layout, and access are explained, covering concepts such as pointer collisions, Thread‑Local Allocation Buffers (TLAB), object headers, instance data, padding, and the differences between handle and direct pointer access.
The garbage‑collection chapter discusses reachability analysis, three basic algorithms (mark‑sweep, copying, mark‑compact), generational theory (young vs. old generation), and several collectors: Serial, Serial Old, Parallel Scavenge (PS), Parallel Old (PO), ParNew, CMS, and G1. Their advantages, drawbacks, typical use‑cases, and relevant JVM flags are summarized.
Practical tuning tools are presented, including VisualVM (with IDE integration), Alibaba’s Arthas, and classic JDK commands ( jps, jstat, jinfo, jmap, jstack). The author stresses the importance of analyzing CPU spikes, OOM incidents, and memory pressure using these utilities.
java.lang.OutOfMemoryError: Java heap space<br/>Dumping heap to java_pid3404.hprof ...<br/>Heap dump file created [22045981 bytes in 0.663 secs]By mastering these concepts and tools, readers can confidently diagnose and resolve performance bottlenecks, avoid common pitfalls such as excessive object allocation or oversized caches, and ultimately become proficient JVM performance engineers.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Full-Stack Internet Architecture
Introducing full-stack Internet architecture technologies centered on Java
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
