GC, Memory & Heap Analysis
- JVM memory model: heap, metaspace, stack, off-heap
- Garbage collection algorithms: G1GC, ZGC, Shenandoah — trade-offs and when to use each
- GC log analysis: enabling with -Xlog:gc*, reading pause times and throughput
- Object allocation profiling: finding allocation hot spots with async-profiler
- Heap dump analysis: Eclipse MAT — retained heap, dominator tree, leak suspects
- Common memory leaks: static collections, unclosed resources, ThreadLocal misuse
- JVM flags: tuning heap size, GC algorithm selection, survivor ratios
- Metaspace: when it grows unbounded and how to cap it
CPU, Threading & Production Profiling
- JIT compilation: tiered compilation, inlining, deoptimization
- async-profiler: CPU flame graphs, wall-clock profiling, allocation profiling
- Thread dump analysis: identifying deadlocks, lock contention, thread starvation
- Virtual threads (Project Loom): when they help and when they don't
- JMH: writing correct microbenchmarks — avoiding JIT pitfalls
- JFR (Java Flight Recorder): continuous production profiling without overhead
- JDK Mission Control: analyzing JFR recordings
- Spring Boot specific: identifying slow startup, actuator metrics tuning
- Connection pool tuning: HikariCP metrics and identifying pool exhaustion
Java developers who can approach performance problems systematically — with real tooling, real measurements, and an understanding of what the JVM is actually doing.
- Read and interpret GC logs and identify the cause of long pause times
- Analyze heap dumps with Eclipse MAT to find memory leaks
- Profile CPU usage with async-profiler and read flame graphs
- Write correct JMH benchmarks and measure before optimizing
Book the JVM Performance training
Hands-on profiling workshop — bring a real performance problem from your codebase and we work through it together.
Get in touch