Shenandoah: An open source pauseless GC for OpenJDK.
summary
Shenandoah implements concurrent evacuation for OpenJDK by doing marking and copying while Java threads run, using regioned heaps, work‑stealing parallelism and per‑object forwarding pointer indirection. It adds an extra word per object, unconditional read barrier and heavier write barriers, and treats very large “humongous” objects specially. The claim is sub‑10ms pauses for 100+GB heaps; measured initial/final marks land around 5–8ms (max 10–15ms) versus G1’s ~31/75ms, at a throughput cost reported in the single‑digits to low tens of percent.
AI-written summary · about
chapters (18)
- 0:00Start
- 0:41What do you mean by ultra-low pause time?
- 1:38What exactly are we organizing?
- 3:38Why concurrent compaction is hard.
- 4:03What does the GC do?
- 4:30What does Shenandoah do to optimize GC time?
- 5:53How do we do this while the Java threads are running?
- 7:28Added benefit to forwarding pointers
- 8:04Shenandoah: Current implementation
- 9:45What's tricky about SATB? Start of Concurrent Marking
- 10:14How to move an object while the program is running
- 10:47Forwarding Pointers - reads
- 12:28Forwarding Pointers - writes of references
- 13:08Forwarding Pointers - CAS
- 14:30How to use multiple threads?
- 15:16Costs and Benefits
- 17:13Performance Tuning
- 18:40Future Work
related talks
40mTrash Talk - Exploring the Memory Management in the JVM
42mA State of Java Elasticity
21mMark–Scavenge: Waiting for Trash to Take Itself Out
43mGarbage Collection in Java: The Performance Benefits of Upgrading
41mJava 24, Faster Than Ever
52mGC Tuning & Troubleshooting Crash Course
35mJava in a world of containers
39mMemory Efficient Java
