--- id: P-REINFORCE-AUTO-735166 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Scavenger(λ§ˆμ΄λ„ˆ GC)" --- # [[Scavenger(ᄆᅑ아ᄂα…₯ GC)|Scavenger(λ§ˆμ΄λ„ˆ GC)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **λ™μž‘ 원리와 μ²΄λ‹ˆμ˜ μ•Œκ³ λ¦¬μ¦˜ (Cheney's Algorithm)** λŒ€λΆ€λΆ„μ˜ Scavenge κ΅¬ν˜„μ€ μ²΄λ‹ˆμ˜ μ•Œκ³ λ¦¬μ¦˜(Cheney's algorithm)을 기반으둜 ν•œ λ°˜κ³΅κ°„(semi-space) 섀계λ₯Ό λ”°λ¦…λ‹ˆλ‹€ [2, 4]. μƒˆλ‘œμš΄ 곡간은 크기가 같은 두 개의 곡간인 To-Space와 From-Space둜 λ‚˜λ‰©λ‹ˆλ‹€ [4, 6, 7]. ν‰μ†Œμ—λŠ” 객체가 From-Space에 ν• λ‹Ήλ˜λ‹€κ°€ 이 곡간이 가득 μ°¨λ©΄, κ°€λΉ„μ§€ μ»¬λ ‰ν„°λŠ” From-Space의 μ‚΄μ•„μžˆλŠ” 객체듀을 To-Space의 μ—°μ†λœ λ©”λͺ¨λ¦¬ λΈ”λ‘μœΌλ‘œ λŒ€ν”Ό(evacuate)μ‹œν‚΅λ‹ˆλ‹€ [4, 5, 7]. 이후 죽은 객체듀이 μžˆλŠ” From-SpaceλŠ” μ™„μ „νžˆ λΉ„μ›Œμ§€λ©° 두 κ³΅κ°„μ˜ 역할이 λ°”λ€λ‹ˆλ‹€ [5, 8, 9]. * **객체 이동, 포인터 μ—…λ°μ΄νŠΈ 및 승격 (Promotion)** ν™œμ„± 객체가 μƒˆ μœ„μΉ˜λ‘œ 이동될 λ•Œ, μ›λž˜ μœ„μΉ˜μ—λŠ” μƒˆλ‘œμš΄ μ£Όμ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” ν¬μ›Œλ”© μ£Όμ†Œ(forwarding address)κ°€ 남겨져 이λ₯Ό μ°Έμ‘°ν•˜λ˜ λ‹€λ₯Έ 포인터듀이 μ—…λ°μ΄νŠΈλ  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€ [9-11]. 두 번의 λ§ˆμ΄λ„ˆ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μ£ΌκΈ°(μŠ€μΊλΉˆμ§€)λ₯Ό μƒμ‘΄ν•œ 객체듀은 μž₯κΈ° 보관을 μœ„ν•΄ '였래된 곡간(Old Space λ˜λŠ” Tenure μ˜μ—­)'으둜 승격(Promoted)λ©λ‹ˆλ‹€ [1, 3, 5]. 객체듀을 To-Space의 ν•œμͺ½μœΌλ‘œ λͺ¨μœΌλ©΄μ„œ λ‹¨νŽΈν™”κ°€ ν•΄κ²°λ˜λ―€λ‘œ μΊμ‹œ 지역성이 ν–₯μƒλ˜κ³  ν• λ‹Ή 속도가 μœ μ§€λ©λ‹ˆλ‹€ [4]. * **루트 μŠ€μΊ” 및 병렬 처리 (Parallel Scavenging)** λ§ˆμ΄λ„ˆ GCλŠ” 맀우 짧은 μ‹œκ°„ 내에 μˆ˜ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€ [4]. 이λ₯Ό μœ„ν•΄ V8 엔진은 λ‹€μˆ˜μ˜ λ„μš°λ―Έ μŠ€λ ˆλ“œ(helper threads)λ₯Ό ν™œμš©ν•œ 병렬 μŠ€μΊλΉˆμ§•(Parallel scavenging) 기법을 μ‚¬μš©ν•˜μ—¬, 루트 μŠ€μΊ”, μ Šμ€ μ„ΈλŒ€ λ‚΄μ˜ 객체 볡사, 였래된 μ„ΈλŒ€λ‘œμ˜ 승격, 포인터 μ—…λ°μ΄νŠΈ μž‘μ—…μ„ λ³‘λ ¬μ μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€ [12-14]. 메인 μŠ€λ ˆλ“œμ™€ λ„μš°λ―Έ μŠ€λ ˆλ“œλ“€μ€ μ›μžμ (atomic)인 읽기/μ“°κΈ°/비ꡐ κ΅ν™˜(compare-and-swap) 연산을 톡해 λ™κΈ°ν™”ν•˜μ—¬ λ™μΌν•œ 객체가 쀑볡 μ΄λ™λ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€ [12]. * **IBM SDK ν™˜κ²½μ—μ„œμ˜ μŠ€μΊλΉˆμ§€** IBM의 gencon GC μ •μ±… λ“±μ—μ„œλ„ μŠ€μΊλΉˆμ§€ μž‘μ—…μ΄ μ‘΄μž¬ν•˜λ©°, μ΄λŠ” Nursery μ˜μ—­μ—μ„œ ν• λ‹Ή μ‹€νŒ¨κ°€ λ°œμƒν•  λ•Œ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€ [3]. 루트 μŠ€μΊ”μ„ 톡해 도달 κ°€λŠ₯ν•œ 객체λ₯Ό μ°Ύκ³  μŠ€νƒμ— 담은 λ’€ 계측적 μŠ€μΊ” μˆœμ„œ(hierarchical scan ordering)λ₯Ό μ‚¬μš©ν•΄ μΆ”μ ν•˜λ©°, μ‚΄μ•„μžˆλŠ” 객체λ₯Ό ν• λ‹Ή κ³΅κ°„μ—μ„œ Survivor κ³΅κ°„μ΄λ‚˜ Tenure μ˜μ—­μœΌλ‘œ λ³΅μ‚¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€ [3]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[New Space(Young Generation)|New Space(Young Generation)]], [[Cheney's Algorithm|Cheney's Algorithm]], Promotion(승격), Major GC(Mark-Sweep/Mark-Compact) - **Projects/Contexts:** [[V8 JavaScript Engine|V8 JavaScript Engine]], IBM SDK (gencon GC policy) - **Contradictions/Notes:** μ†ŒμŠ€ κ°„μ˜ λ‚΄μš© λͺ¨μˆœμ€ λ°œκ²¬λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. V8 μ—”μ§„μ˜ λ§ˆμ΄λ„ˆ GC λ©”μ»€λ‹ˆμ¦˜κ³Ό IBM SDK(gencon μ •μ±…)의 μŠ€μΊλΉˆμ§€ μž‘μ—…μ€ κ΅¬ν˜„ ν™˜κ²½μ€ λ‹€λ₯΄μ§€λ§Œ, λͺ¨λ‘ '주둜 μƒˆλ‘­κ²Œ ν• λ‹Ήλ˜λŠ” μž‘μ€ 곡간을 λŒ€μƒμœΌλ‘œ ν•˜μ—¬ λΉ λ₯Έ 주기둜 μ‚΄μ•„μžˆλŠ” 객체λ₯Ό 볡사 및 μŠΉκ²©ν•œλ‹€'λŠ” κ³΅ν†΅λœ 역할을 μ„±κ³΅μ μœΌλ‘œ μˆ˜ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Scavenger(λ§ˆμ΄λ„ˆ GC).md ---