Old space · Old generationmark‑compact · promoted objects + hidden classes
Large‑object
Code
Read‑only
Orinoco: getting GC work off the main thread
A naïve collector stops the world: JS freezes while it works, causing visible jank. V8's Orinoco collector moves most of that work off the main thread and shortens what remains. Short pauses still happen.
Stop‑the‑world
the naïve baseline
Main thread
One long pause blocks everything - hundreds of ms of jank.
Incremental
split into small steps
Main thread
Marking is broken into small scheduled steps interleaved between JS work; V8 picks their size dynamically.
Concurrent
GC on background threads
Main thread - runs JS
Helper thread
Most marking runs on helpers while JS keeps executing. V8's launch benchmarks measured roughly 65‑70% less main‑thread marking, though the gain is workload‑dependent.
Parallel
many threads, together
Main thread (paused briefly)
Helper 1
Helper 2
The Scavenger splits its work across cores with dynamic work‑stealing; major‑GC evacuation and pointer updating also run in parallel, to finish the short pause faster.