--- id: [[P-Reinforce|P-Reinforce]]-AUTO-3353DC category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - [[Orinoco|Orinoco]] κ°€λΉ„μ§€ 컬렉터" --- # [[Orinoco α„€α…‘α„‡α…΅α„Œα…΅ ᄏα…₯ᆯ렉ᄐα…₯|Orinoco κ°€λΉ„μ§€ 컬렉터]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > OrinocoλŠ” V8 [[JavaScript|JavaScript]] μ—”μ§„μ˜ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) μ„±λŠ₯을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ λ„μž…λœ ν”„λ‘œμ νŠΈμ˜ μ½”λ“œλͺ…μž…λ‹ˆλ‹€ [1, 2]. 기쑴의 순차적이고 ν”„λ‘œκ·Έλž¨ 싀행을 λ©ˆμΆ”κ²Œ ν•˜λŠ” '[[Stop-the-world|Stop-the-world]]' λ°©μ‹μ˜ μˆ˜μ§‘κΈ°λ₯Ό 점진적(Incremental) 폴백(Fallback)을 κ°–μΆ˜ 병렬(Parallel) 및 λ™μ‹œμ„±(Concurrent) μˆ˜μ§‘κΈ°λ‘œ νƒˆλ°”κΏˆμ‹œμΌ°μŠ΅λ‹ˆλ‹€ [1, 3]. 이λ₯Ό 톡해 메인 μŠ€λ ˆλ“œμ˜ GC μž‘μ—… 뢀담을 μ΅œμ†Œν™”ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ§€μ—° μ‹œκ°„(Latency)을 쀄이고 슀크둀 및 μ• λ‹ˆλ©”μ΄μ…˜ λ Œλ”λ§μ„ 훨씬 λΆ€λ“œλŸ½κ²Œ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€ [4, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **핡심 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ 기술** OrinocoλŠ” 메인 μŠ€λ ˆλ“œλ₯Ό ν•΄λ°©μ‹œν‚€κΈ° μœ„ν•΄ λ‹€μŒ μ„Έ κ°€μ§€ μ£Όμš” μ΅œμ ν™” 기법을 ν˜Όν•©ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€ [2]. * **병렬(Parallel) 처리**: 메인 μŠ€λ ˆλ“œμ™€ 헬퍼 μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— λŒ€λž΅ 같은 μ–‘μ˜ GC μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [2]. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행을 λ©ˆμΆ”λŠ” 'stop-the-world' 접근법이긴 ν•˜μ§€λ§Œ, 총 쀑단 μ‹œκ°„μ„ μ°Έμ—¬ν•˜λŠ” μŠ€λ ˆλ“œ 수만큼 λ‚˜λˆ„μ–΄ λŒ€κΈ° μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚΅λ‹ˆλ‹€ [2]. * **점진적(Incremental) 처리**: 전체 GCλ₯Ό ν•œ λ²ˆμ— ν•˜λŠ” λŒ€μ‹ , 메인 μŠ€λ ˆλ“œκ°€ κ°„ν—μ μœΌλ‘œ μ†ŒλŸ‰μ˜ GC μž‘μ—…λ§Œ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [6]. JavaScript μ‹€ν–‰κ³Ό GC μž‘μ—…μ΄ λ²ˆκ°ˆμ•„ λ°œμƒν•˜λ„λ‘ λΆ„μ‚°μ‹œμΌœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‚¬μš©μž μž…λ ₯κ³Ό μ• λ‹ˆλ©”μ΄μ…˜ μ²˜λ¦¬μ— μ§€μ†μ μœΌλ‘œ 응닡할 수 있게 ν•©λ‹ˆλ‹€ [6, 7]. * **λ™μ‹œμ„±(Concurrent) 처리**: 메인 μŠ€λ ˆλ“œκ°€ JavaScriptλ₯Ό 계속 μ‹€ν–‰ν•˜λŠ” λ™μ•ˆ, 헬퍼 μŠ€λ ˆλ“œλ“€μ΄ λ°±κ·ΈλΌμš΄λ“œμ—μ„œ GC μž‘μ—…μ„ μ „μ μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [8]. μ΄λŠ” 메인 μŠ€λ ˆλ“œλ₯Ό 자유둭게 ν•˜μ§€λ§Œ, 객체의 λ³€κ²½ 사항을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μŠ€λ ˆλ“œ κ°„ 동기화와 읽기/μ“°κΈ° μΆ©λŒμ„ μ œμ–΄ν•΄μ•Ό ν•˜λŠ” κ°€μž₯ κ³ λ‚œλ„μ˜ κΈ°μˆ μž…λ‹ˆλ‹€ [8]. **μ£Όμš” GC 단계별 Orinoco의 적용** * **Minor GC ([[Scavenge|Scavenge]]r)**: V8의 Young μ„ΈλŒ€ κ°€λΉ„μ§€ μ»¬λ ‰ν„°λŠ” 병렬 μŠ€μΊλΉˆμ§•(Parallel scavenging)을 μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ 헬퍼 μŠ€λ ˆλ“œμ— μž‘μ—…μ„ λΆ„μ‚°μ‹œν‚΅λ‹ˆλ‹€ [9, 10]. 각 헬퍼 μŠ€λ ˆλ“œλŠ” 포인터λ₯Ό 따라가며 μ‚΄μ•„μžˆλŠ” 객체λ₯Ό μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간(To-Space)으둜 λŒ€ν”Όμ‹œν‚€κ³  포인터λ₯Ό λ³‘λ ¬λ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [9]. * **[[Major GC|Major GC]] (Mark-Compact)**: Old μ„ΈλŒ€μ˜ μˆ˜μ§‘μ€ 주둜 λ™μ‹œ λ§ˆν‚Ή(Concurrent marking)으둜 μ‹œμž‘λ©λ‹ˆλ‹€ [11]. λ°±κ·ΈλΌμš΄λ“œμ˜ 헬퍼 μŠ€λ ˆλ“œλ“€μ΄ μ‚΄μ•„μžˆλŠ” 객체λ₯Ό μ°Ύμ•„ λ§ˆν‚Ήν•˜λŠ” λ™μ•ˆ 메인 μŠ€λ ˆλ“œλŠ” JavaScriptλ₯Ό μ‹€ν–‰ν•˜λ©°, μƒˆλ‘œ μƒμ„±λœ μ°Έμ‘°λŠ” 'μ“°κΈ° μž₯λ²½([[Write Barrier|Write Barrier]]s)'을 톡해 μΆ”μ λ©λ‹ˆλ‹€ [11, 12]. 이후 메인 μŠ€λ ˆλ“œλŠ” μž μ‹œ 멈좰 λΉ λ₯Έ λ§ˆν‚Ή μ™„λ£Œ 처리λ₯Ό ν•œ λ’€, 헬퍼 μŠ€λ ˆλ“œλ“€κ³Ό ν•¨κ»˜ 병렬 μ••μΆ•(Parallel compaction)을 μˆ˜ν–‰ν•˜κ³  λ°±κ·ΈλΌμš΄λ“œμ—μ„œλŠ” λ™μ‹œ μŠ€μœ•(Concurrent sweeping)을 μ§„ν–‰ν•©λ‹ˆλ‹€ [13, 14]. **기타 μ΅œμ ν™” 기법** * **Idle-time GC (유휴 μ‹œκ°„ GC)**: [[Chrome|Chrome]]κ³Ό 같은 ν™˜κ²½μ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜ ν”„λ ˆμž„(예: μ΄ˆλ‹Ή 60ν”„λ ˆμž„, μ•½ 16.6ms)을 λ Œλ”λ§ν•œ ν›„ μ—¬μœ  μ‹œκ°„μ΄ 남을 경우, GCκ°€ ν•΄λ‹Ή 유휴 μ‹œκ°„μ„ ν™œμš©ν•˜μ—¬ μ„ μ œμ μœΌλ‘œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [5, 15]. * 기타 V8의 λΈ”λž™ ν• λ‹Ή(Black allocation) κΈ°λŠ₯κ³Ό 포인터 좔적(Tracking Pointers) 기법을 κ°œμ„ ν•˜μ—¬ On-heap 및 Off-heap λ©”λͺ¨λ¦¬μ˜ 피크 μ‚¬μš©λŸ‰μ„ 큰 폭으둜 μ€„μ˜€μŠ΅λ‹ˆλ‹€ [3, 16, 17]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** κ°€λΉ„μ§€ μ»¬λ ‰μ…˜([[Garbage Collection|Garbage Collection]]), V8 JavaScript μ—”μ§„, Minor GC (Scavenger), Major GC (Mark-Compact), μ„ΈλŒ€λ³„ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Generational Garbage Collection) - **Projects/Contexts:** V8 λ©”λͺ¨λ¦¬ 관리 및 μ΅œμ ν™”, Node.js 및 Chrome λΈŒλΌμš°μ € λ Œλ”λ§ μ„±λŠ₯ μ΅œμ ν™” - **Contradictions/Notes:** κ³Όκ±° V8 버전은 Cheney의 동기식 μ„Έλ―ΈμŠ€νŽ˜μ΄μŠ€ 볡사 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν–ˆμœΌλ‚˜, V8 v6.2λΆ€ν„° Orinoco ν”„λ‘œμ νŠΈμ˜ μΌν™˜μœΌλ‘œ 동적 μž‘μ—… ν›”μΉ˜κΈ°(Work stealing) 기법을 μ‚¬μš©ν•˜λŠ” Halstead λ°©μ‹μ˜ 병렬 μŠ€μΊλΉˆμ €λ‘œ λŒ€μ²΄λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [10, 18]. --- *Last updated: 2026-04-19* ---