"매 V8 의 GC 의 mostly-parallel, mostly-concurrent 의 evolution". 2016 발표된 Orinoco initiative 가 V8 의 stop-the-world phase 를 minimize — incremental marking, parallel scavenge, concurrent sweeping, compaction 의 background offload. 2026 현재 V8 12+ 의 default. Main thread pause time 이 100ms+ → sub-10ms 로 reduce.
매 핵심
매 design pillars
Parallelism: 동시 main thread 를 멈추고 worker thread 다수 사용 (parallel scavenge, parallel compaction).
Concurrency: main thread 는 mutator 의 user code 실행, GC thread 가 background marking/sweeping.
Incremental: long pause 를 작은 step 으로 split, frame 사이 의 짤끔.
Idle-time GC: main thread idle window (rAF gap) 의 활용.
매 collector phases
Young (Scavenger): parallel copying, 보통 <1ms.
Old marking: incremental + concurrent (mutator 동시 실행).
Old sweeping: concurrent free-list rebuild.
Old compaction: parallel evacuation, 매 page-level.
Write barrier: 매 mutator 가 mark 와 race 의 prevent.
매 응용
Chrome / Edge / Brave (V8 host).
Node.js / Deno / Bun (runtime GC 의 같은 Orinoco 기반, Bun 은 JSC 라 다름).
// O — short-lived 의 young space 에 머무름
functionprocessBatch(items){returnitems.map(i=>({id:i.id,val:i.val*2}))// returns die fast
}// X — large pre-allocated buffer 의 old promotion 강제
constgiant=newArray(1e7).fill(0)// bypasses young entirely
--max-old-space-size tuning
node --max-old-space-size=4096 app.js # 4GB old space ceiling
Idle-time GC hint
// Chrome internal — webpages cannot directly trigger,
// but rAF-aligned work 의 GC 가 idle gap 을 활용
requestIdleCallback((deadline)=>{while(deadline.timeRemaining()>0&&tasks.length)doWork(tasks.pop())})