--- id: wiki-2026-0508-scavenge title: Scavenge category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [P-Reinforce-AUTO-E7007A] duplicate_of: none source_trust_level: A confidence_score: 0.9 tags: [auto-reinforced] raw_sources: [] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Scavenge" inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Scavenge|Scavenge]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Scavenge(μŠ€μΊλΉˆμ§€)λŠ” V8 엔진을 λΉ„λ‘―ν•œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) μ‹œμŠ€ν…œμ—μ„œ μ Šμ€ μ„ΈλŒ€(Young Generation) λ©”λͺ¨λ¦¬λ₯Ό μ •λ¦¬ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰λ˜λŠ” λ§ˆμ΄λ„ˆ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Minor GC) μ£ΌκΈ°μž…λ‹ˆλ‹€ [1, 2]. 주둜 μƒˆλ‘œμš΄ 객체가 ν• λ‹Ήλ˜λŠ” 'μƒˆλ‘œμš΄ 곡간(New-space)'이 가득 μ°¨μ„œ 할당에 μ‹€νŒ¨ν–ˆμ„ λ•Œ 트리거되며, 죽은 객체λ₯Ό λΉ λ₯΄κ²Œ μ œκ±°ν•˜κ³  μ‚΄μ•„μžˆλŠ” 객체λ₯Ό λ³΄μ‘΄ν•©λ‹ˆλ‹€ [1, 2]. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ 쀑 맀우 λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•˜κΈ° λ•Œλ¬Έμ— μ„±λŠ₯에 λ―ΈμΉ˜λŠ” 영ν–₯을 μ΅œμ†Œν™”ν•˜λ„λ‘ 극히 λΉ λ₯Έ μ†λ„λ‘œ λ™μž‘ν•˜κ²Œ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λ™μž‘ 원리 (V8 μ—”μ§„ 및 Cheney의 μ•Œκ³ λ¦¬μ¦˜):** V8의 μƒˆ 곡간(New-space)은 크기가 같은 두 개의 λ°˜κ³΅κ°„(Semi-space)인 To-space와 From-space둜 λ‚˜λ‰©λ‹ˆλ‹€ [3]. 객체 ν• λ‹Ή 포인터가 μƒˆ κ³΅κ°„μ˜ 끝에 λ„λ‹¬ν•˜μ—¬ λ©”λͺ¨λ¦¬κ°€ 고갈되면 μŠ€μΊλΉˆμ§€κ°€ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€ [1, 2]. μ΄λ•Œ To-space와 From-space의 역할을 λ§žλ°”κΎΌ λ’€, From-spaceλ₯Ό μŠ€μΊ”ν•˜μ—¬ μ‚΄μ•„μžˆλŠ” 객체듀을 μ°Ύμ•„ To-space의 ν•œμͺ½ 끝으둜 볡사(λŒ€ν”Ό)ν•˜λ©°, 이 과정을 톡해 λ©”λͺ¨λ¦¬ νŒŒνŽΈν™”(Fragmentation)κ°€ μ™„μ „νžˆ μ œκ±°λ©λ‹ˆλ‹€ [3, 4]. - **객체의 승격 (Promotion):** 두 번의 μŠ€μΊλΉˆμ§€(λ§ˆμ΄λ„ˆ GC) μ£ΌκΈ° λ™μ•ˆ 살아남은 κ°μ²΄λŠ” 수λͺ…이 κΈ΄ 객체둜 κ°„μ£Όλ˜μ–΄ μƒˆ κ³΅κ°„μ—μ„œ '였래된 곡간(Old-space)'으둜 승격(Promoted)λ©λ‹ˆλ‹€ [1, 4]. - **병렬 및 μŠ€λ ˆλ“œ 처리 ([[Orinoco|Orinoco]] κ°€λΉ„μ§€ 컬렉터):** μ „ν†΅μ μœΌλ‘œ μŠ€μΊλΉˆμ§€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행을 λ©ˆμΆ”λŠ” '[[Stop-the-world|Stop-the-world]]' λ°©μ‹μ΄μ—ˆμ§€λ§Œ, V8의 Orinoco ν”„λ‘œμ νŠΈμ—μ„œλŠ” 병렬 μŠ€μΊλΉˆμ €(Parallel Scavenger)λ₯Ό λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€ [5-7]. 메인 μŠ€λ ˆλ“œμ™€ μ—¬λŸ¬ 헬퍼 μŠ€λ ˆλ“œμ— μž‘μ—…μ„ λΆ„μ‚°ν•˜μ—¬ 루트 μŠ€μΊ”, 객체 볡사, 였래된 κ³΅κ°„μœΌλ‘œμ˜ 승격, 포인터 μ—…λ°μ΄νŠΈλ₯Ό λ³‘λ ¬μ μœΌλ‘œ λΌμ›Œ λ„£μ–΄(Interleaved) μ‹€ν–‰ν•©λ‹ˆλ‹€ [6, 8, 9]. 이λ₯Ό 톡해 메인 μŠ€λ ˆλ“œμ˜ λŒ€κΈ° μ‹œκ°„(Pause time)을 μ•½ 20%~50%κΉŒμ§€ λŒ€ν­ λ‹¨μΆ•ν–ˆμŠ΅λ‹ˆλ‹€ [10, 11]. - **IBM J9 / E[[CLIP|CLIP]]se OpenJ9 ν™˜κ²½μ˜ μŠ€μΊλΉˆμ§€:** IBM GC μ •μ±…(주둜 gencon μ •μ±…)μ—μ„œλ„ λ„μ„œλ¦¬(Nursery) μ˜μ—­μ—μ„œμ˜ ν• λ‹Ή μ‹€νŒ¨ μ‹œ μŠ€μΊλΉˆμ§€ μž‘μ—…μ΄ μ‹€ν–‰λ©λ‹ˆλ‹€ [12]. 이 μž‘μ—…μ€ 루트 객체λ₯Ό μ‹λ³„ν•˜λŠ” 루트 μŠ€μΊ”(Initial), 도달 κ°€λŠ₯ν•œ 객체λ₯Ό λ„μ„œλ¦¬μ˜ μƒμ‘΄μž(Survivor) κ³΅κ°„μ΄λ‚˜ 텐뉴어(Tenure) κ³΅κ°„μœΌλ‘œ μ΄λ™μ‹œν‚€λŠ” 계측적 μŠ€μΊ”(Main), 그리고 μ•½ν•œ μ°Έμ‘° 등을 μ²˜λ¦¬ν•˜λŠ” 단계(Final)둜 κ΅¬μ„±λ©λ‹ˆλ‹€ [12]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], New-space (Young Generation), Old-space (Old Generation), Cheney's Algorithm, [[Mark-Sweep|Mark-Sweep]]-Compact - **Projects/Contexts:** [[V8 JavaScript Engine|V8 JavaScript Engine]], Orinoco GC, Eclipse OpenJ9 - **Contradictions/Notes:** μ†ŒμŠ€ κ°„μ˜ λšœλ ·ν•œ λͺ¨μˆœμ€ μ—†μœΌλ‚˜, μŠ€μΊλΉˆμ§€κ°€ λ°œμƒν•˜λ©΄ 본래 메인 μŠ€λ ˆλ“œκ°€ μ •μ§€ν•˜λŠ” 'Stop-the-world' ν˜„μƒμ΄ λ°œμƒν•˜μ§€λ§Œ μ΅œμ‹  V8 μ—”μ§„(Orinoco)μ—μ„œλŠ” λ‹€μˆ˜μ˜ μŠ€λ ˆλ“œλ₯Ό λ™μ›ν•œ 병렬 처리(Parallel)λ₯Ό μ μš©ν•˜μ—¬ μ‚¬μš©μžκ°€ λŠλΌλŠ” μ§€μ—°(Jank)을 획기적으둜 μ€„μ˜€λ‹€κ³  λͺ…μ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [6, 10, 13]. --- *Last updated: 2026-04-19* --- ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** needs_review - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## πŸ•“ λ³€κ²½ 이λ ₯ (Changelog) | λ‚ μ§œ | λ³€κ²½ λ‚΄μš© | 처리 방식 | 신뒰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 μ •κ·œν™” (frontmatter + 헀더 ν‘œμ€€ν™”) | UPDATE | A | ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code Patterns) **νŒ¨ν„΄ 1:** *(TODO: 이 ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ λ°˜μ˜ν•œ ꡬ쑰 μŠ€μΌˆλ ˆν†€)* ```text # TODO ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ (Decision Criteria) **선택 Aλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **선택 Bλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **κΈ°λ³Έκ°’:** > *(TODO)* ## ❌ μ•ˆν‹°νŒ¨ν„΄ (Anti-Patterns) - **[μ•ˆν‹°νŒ¨ν„΄]:** *(TODO: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*