id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
id
title
category
status
canonical_id
aliases
duplicate_of
source_trust_level
confidence_score
verification_status
tags
raw_sources
last_reinforced
github_commit
tech_stack
wiki-2026-0508-orinoco
Orinoco (V8 GC project)
10_Wiki/Topics
verified
self
V8 Orinoco
Orinoco GC
Concurrent V8 GC
none
A
0.9
applied
v8
gc
performance
concurrent-marking
runtime
2026-05-10
pending
language
framework
cpp
v8
Orinoco
매 한 줄
"매 V8의 GC를 stop-the-world에서 incremental · concurrent · parallel multi-threaded GC로 전환한 multi-year 프로젝트." . 2016년 시작, 2017-2019 Concurrent Marking · Parallel Scavenger · Lazy Sweeping 차례 도입. 2026 현재 V8 13.x base GC architecture가 Orinoco — pause time을 100ms+ → <1ms로 감소.
매 핵심
매 핵심 기법
Parallel Scavenger (Young Gen): 매 multiple worker가 semi-space copy 병렬화.
Concurrent Marking (Old Gen): 매 worker thread가 mutator와 병행 mark — main thread는 거의 미 pause.
Incremental Marking : 매 mark phase를 여러 작은 chunk로 나눔.
Parallel/Concurrent Compaction : page별 evacuation 병렬화.
Lazy Sweeping : 매 sweep을 allocation 시점까지 지연.
Black Allocation : 매 marking 중 새 alloc은 black (skip).
매 write barrier 역할
매 mutator가 마크된 object → 비마크 object 참조 추가 시 dirty card 표시.
매 concurrent marker가 stale graph 처리.
매 응용
Chrome — main thread jank 감소, smooth 60fps scroll.
Node.js — large heap server에서 long pause 제거.
Electron/VSCode — GUI responsiveness 유지.
💻 패턴
Orinoco effect 측정 (Node.js)
Disable concurrent marking (compare)
Per-isolate GC stats
Performance.measureUserAgentSpecificMemory (Chrome)
Reduce concurrent-marking pressure
Inspect GC marking phase via perf_hooks
매 결정 기준
상황
Approach
Long pause complaint (UI jank)
check Orinoco enabled (default), profile
Embedded V8 (custom flags)
enable concurrent + incremental marking
Constrained memory (IoT)
might disable concurrent (extra worker thread)
Benchmarking
report w/ default flags + GC trace
기본값 : 매 default flags (Orinoco on) — 매 manual disable 회피.
🔗 Graph
🤖 LLM 활용
언제 : V8 GC internals 학습, Node.js/Chrome perf 분석, GC pause 회귀 추적.
언제 X : non-V8 runtime (Hermes는 별도 GC), Java/Go GC (G1/ZGC/Shenandoah는 다른 design).
❌ 안티패턴
Disabling concurrent marking blindly : 매 measurement 없이 — 보통 perf 악화.
Huge mutation in hot loop : 매 write barrier overload.
Forcing global.gc() 빈번 : 매 production 절대 X — Orinoco가 알아서 함.
Confusing minor (scavenge) and major (mark-sweep) : 매 trace 해석 오류.
🧪 검증 / 중복
Verified (V8 blog "Orinoco" series 2016-2019, V8 source src/heap/, Mathias Bynens & Benedikt Meurer talks 2017-2020).
신뢰도 A.
🕓 Changelog
날짜
변경
2026-05-08
Phase 1
2026-05-10
Manual cleanup — Orinoco GC project (concurrent/parallel/incremental)