--- id: P-REINFORCE-AUTO-E7007A category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Scavenge" --- # [[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 κ°€λΉ„μ§€ 컬렉터):** μ „ν†΅μ μœΌλ‘œ μŠ€μΊλΉˆμ§€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행을 λ©ˆμΆ”λŠ” 'Stop-the-world' λ°©μ‹μ΄μ—ˆμ§€λ§Œ, V8의 Orinoco ν”„λ‘œμ νŠΈμ—μ„œλŠ” 병렬 μŠ€μΊλΉˆμ €(Parallel Scavenger)λ₯Ό λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€ [5-7]. 메인 μŠ€λ ˆλ“œμ™€ μ—¬λŸ¬ 헬퍼 μŠ€λ ˆλ“œμ— μž‘μ—…μ„ λΆ„μ‚°ν•˜μ—¬ 루트 μŠ€μΊ”, 객체 볡사, 였래된 κ³΅κ°„μœΌλ‘œμ˜ 승격, 포인터 μ—…λ°μ΄νŠΈλ₯Ό λ³‘λ ¬μ μœΌλ‘œ λΌμ›Œ λ„£μ–΄(Interleaved) μ‹€ν–‰ν•©λ‹ˆλ‹€ [6, 8, 9]. 이λ₯Ό 톡해 메인 μŠ€λ ˆλ“œμ˜ λŒ€κΈ° μ‹œκ°„(Pause time)을 μ•½ 20%~50%κΉŒμ§€ λŒ€ν­ λ‹¨μΆ•ν–ˆμŠ΅λ‹ˆλ‹€ [10, 11]. - **IBM J9 / Eclipse OpenJ9 ν™˜κ²½μ˜ μŠ€μΊλΉˆμ§€:** IBM GC μ •μ±…(주둜 gencon μ •μ±…)μ—μ„œλ„ λ„μ„œλ¦¬(Nursery) μ˜μ—­μ—μ„œμ˜ ν• λ‹Ή μ‹€νŒ¨ μ‹œ μŠ€μΊλΉˆμ§€ μž‘μ—…μ΄ μ‹€ν–‰λ©λ‹ˆλ‹€ [12]. 이 μž‘μ—…μ€ 루트 객체λ₯Ό μ‹λ³„ν•˜λŠ” 루트 μŠ€μΊ”(Initial), 도달 κ°€λŠ₯ν•œ 객체λ₯Ό λ„μ„œλ¦¬μ˜ μƒμ‘΄μž(Survivor) κ³΅κ°„μ΄λ‚˜ 텐뉴어(Tenure) κ³΅κ°„μœΌλ‘œ μ΄λ™μ‹œν‚€λŠ” 계측적 μŠ€μΊ”(Main), 그리고 μ•½ν•œ μ°Έμ‘° 등을 μ²˜λ¦¬ν•˜λŠ” 단계(Final)둜 κ΅¬μ„±λ©λ‹ˆλ‹€ [12]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], [[New Space(Young Generation)|New-space (Young Generation)]], [[Old Space(Old Generation)|Old-space (Old Generation)]], [[Cheney's Algorithm|Cheney's Algorithm]], [[Mark-Sweep-Compact|Mark-Sweep-Compact]] - **Projects/Contexts:** [[V8 JavaScript Engine|V8 JavaScript Engine]], [[Orinoco GC|Orinoco GC]], Eclipse OpenJ9 - **Contradictions/Notes:** μ†ŒμŠ€ κ°„μ˜ λšœλ ·ν•œ λͺ¨μˆœμ€ μ—†μœΌλ‚˜, μŠ€μΊλΉˆμ§€κ°€ λ°œμƒν•˜λ©΄ 본래 메인 μŠ€λ ˆλ“œκ°€ μ •μ§€ν•˜λŠ” 'Stop-the-world' ν˜„μƒμ΄ λ°œμƒν•˜μ§€λ§Œ μ΅œμ‹  V8 μ—”μ§„(Orinoco)μ—μ„œλŠ” λ‹€μˆ˜μ˜ μŠ€λ ˆλ“œλ₯Ό λ™μ›ν•œ 병렬 처리(Parallel)λ₯Ό μ μš©ν•˜μ—¬ μ‚¬μš©μžκ°€ λŠλΌλŠ” μ§€μ—°(Jank)을 획기적으둜 μ€„μ˜€λ‹€κ³  λͺ…μ‹œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ [6, 10, 13]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Scavenge.md ---