--- id: P-REINFORCE-AUTO-8AD1F6 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) > μŠ€μΊλΉˆμ €(Scavenger) λ˜λŠ” λ§ˆμ΄λ„ˆ GC(Minor GC)λŠ” V8 μ—”μ§„ 및 IBM JVM λ“±μ—μ„œ μƒˆλ‘­κ²Œ μƒμ„±λœ 객체듀이 ν• λ‹Ήλ˜λŠ” 'μ Šμ€ μ„ΈλŒ€(Young Generation, New-space, Nursery)' μ˜μ—­μ„ λŒ€μƒμœΌλ‘œ λΉ λ₯΄κ³  λΉˆλ²ˆν•˜κ²Œ μˆ˜ν–‰λ˜λŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μ£ΌκΈ°μž…λ‹ˆλ‹€ [1-3]. λŒ€λΆ€λΆ„μ˜ 객체가 금방 μ†Œλ©Έν•œλ‹€λŠ” 'μ„ΈλŒ€ κ°€μ„€(Generational Hypothesis)'에 κΈ°λ°˜ν•˜μ—¬ μž‘λ™ν•˜λ©°, 살아남은 κ°μ²΄λ§Œμ„ μƒˆλ‘œμš΄ κ³΅κ°„μœΌλ‘œ λ³΅μ‚¬ν•˜κ³  λ‚˜λ¨Έμ§€λŠ” νκΈ°ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜κ³  λ‹¨νŽΈν™”λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€ [1, 4, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **곡간 λΆ„ν•  및 μ²΄λ‹ˆ μ•Œκ³ λ¦¬μ¦˜(Cheney's algorithm):** V8 μ—”μ§„μ—μ„œ μŠ€μΊλΉˆμ €λŠ” μ Šμ€ μ„ΈλŒ€ 곡간을 두 개의 λ™μΌν•œ 크기인 λ°˜κ³΅κ°„(to-space와 from-space)으둜 λ‚˜λˆ•λ‹ˆλ‹€ [3, 6, 7]. ν• λ‹Ή 포인터가 μƒˆ κ³΅κ°„μ˜ 끝에 λ„λ‹¬ν•˜μ—¬ 곡간이 μ±„μ›Œμ§€λ©΄ λ§ˆμ΄λ„ˆ GCκ°€ νŠΈλ¦¬κ±°λ˜μ–΄ 두 κ³΅κ°„μ˜ 역할을 λ°”κΏ‰λ‹ˆλ‹€ [5, 6, 8]. - **객체 λŒ€ν”Ό(Evacuation)와 λ‹¨νŽΈν™” ν•΄κ²°:** 루트 객체 및 κ΅¬μ„ΈλŒ€μ—μ„œ μ‹ μ„ΈλŒ€λ‘œ ν–₯ν•˜λŠ” μ°Έμ‘°(μ“°κΈ° μž₯벽을 톡해 좔적됨)μ—μ„œ μ‹œμž‘ν•˜μ—¬ λͺ¨λ“  ν™œμ„±(Live) 객체λ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€ [8-10]. 이 ν™œμ„± 객체듀은 μƒˆλ‘œμš΄ κ³΅κ°„μœΌλ‘œ 볡사(λŒ€ν”Ό)되며, 이 κ³Όμ •μ—μ„œ 객체듀이 μ—°μ†μ μœΌλ‘œ λ°°μΉ˜λ˜λ―€λ‘œ λ©”λͺ¨λ¦¬ λ‹¨νŽΈν™”κ°€ μ™„μ „νžˆ μ œκ±°λ©λ‹ˆλ‹€ [6, 8, 10]. - **객체의 μŠΉκΈ‰(Promotion):** λ§ˆμ΄λ„ˆ GC κ³Όμ • 쀑 두 번의 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μ£ΌκΈ°μ—μ„œ μƒμ‘΄ν•œ κ°μ²΄λŠ” 수λͺ…이 κΈ΄ 객체둜 κ°„μ£Όλ˜μ–΄ μ˜¬λ“œ 슀페이슀(Old-space)둜 μŠΉκΈ‰λ©λ‹ˆλ‹€ [1, 8, 11, 12]. 객체가 이동할 λ•Œ κΈ°μ‘΄ μœ„μΉ˜μ— 전달 μ£Όμ†Œ(Forwarding address)λ₯Ό 남겨, ν•΄λ‹Ή 객체λ₯Ό μ°Έμ‘°ν•˜λ˜ λ‹€λ₯Έ 포인터듀이 μƒˆλ‘œμš΄ μœ„μΉ˜λ₯Ό 가리킀도둝 μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [9, 11]. - **병렬 μŠ€μΊλΉˆμ €(Parallel Scavenger) μ΅œμ ν™”:** μ΅œμ‹  V8의 Orinoco ν”„λ‘œμ νŠΈλŠ” μŠ€μΊλΉˆμ € μž‘μ—…μ— 헬퍼 μŠ€λ ˆλ“œλ₯Ό λ„μž…ν•˜μ—¬ 메인 μŠ€λ ˆλ“œμ™€ λ³‘λ ¬λ‘œ μž‘μ—…μ„ λΆ„μ‚°μ‹œν‚΅λ‹ˆλ‹€ [13, 14]. 볡수의 μŠ€λ ˆλ“œκ°€ λ™μΌν•œ 객체 λŒ€ν”Όλ₯Ό μ‹œλ„ν•  λ•Œ μ›μžμ (atomic) 읽기/μ“°κΈ°/비ꡐ κ΅ν™˜ μ—°μ‚°μœΌλ‘œ λ™κΈ°ν™”ν•˜λ©°, 이 μ΅œμ ν™”λ₯Ό 톡해 메인 μŠ€λ ˆλ“œμ—μ„œ μ Šμ€ μ„ΈλŒ€ GC에 μ†Œμš”λ˜λŠ” 총 μ‹œκ°„μ„ μ•½ 20~50% κ°μ†Œμ‹œμΌ°μŠ΅λ‹ˆλ‹€ [13, 15, 16]. - **IBM JVM(OpenJ9)의 Scavenge μ—°μ‚°:** IBM의 `gencon` μ •μ±…μ—μ„œλ„ `nursery` μ˜μ—­μ˜ λ©”λͺ¨λ¦¬ ν• λ‹Ή μ‹€νŒ¨ μ‹œ μŠ€μΊλΉˆμ§€ μž‘μ—…μ΄ νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€ [2, 17]. ν™œμ„± 객체λ₯Ό μ‹λ³„ν•˜κΈ° μœ„ν•œ 루트 μŠ€μΊ”(Initial 단계), `allocate` κ³΅κ°„μ—μ„œ `survivor` 곡간 λ˜λŠ” 일정 λ‚˜μ΄μ— 도달 μ‹œ `tenure` κ³΅κ°„μœΌλ‘œ 객체λ₯Ό λ³΅μ‚¬ν•˜λŠ” μž¬κ·€μ  좔적(Main 단계), 그리고 μ•½ν•œ μ°Έμ‘°(Weak reference)λ₯Ό μ²˜λ¦¬ν•˜λŠ” 단계(Final 단계)둜 κ΅¬μ„±λ©λ‹ˆλ‹€ [2]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[세ᄃᅒ ᄀᅑᄉα…₯α†―(Generational Hypothesis)|μ„ΈλŒ€ κ°€μ„€(Generational Hypothesis)]], 메이저 GC(Major GC) / Mark-Compact, μ“°κΈ° μž₯λ²½(Write Barriers), 뉴 슀페이슀(New Space) / μ Šμ€ μ„ΈλŒ€, μ˜¬λ“œ 슀페이슀(Old Space) - **Projects/Contexts:** [[V8 α„‹α…¦α†«α„Œα…΅α†«(V8 Engine)|V8 μ—”μ§„(V8 Engine)]], [[Orinoco α„‘α…³α„…α…©α„Œα…¦α†¨α„α…³|Orinoco ν”„λ‘œμ νŠΈ]], IBM OpenJ9 (gencon μ •μ±…) - **Contradictions/Notes:** μ†ŒμŠ€ μ „λ°˜μ— 걸쳐 V8 μ—”μ§„κ³Ό IBM JVM의 μ„ΈλΆ€ κ΅¬ν˜„ μš©μ–΄(예: New-space와 Nursery)μ—λŠ” 차이가 μžˆμœΌλ‚˜, μƒˆλ‘­κ²Œ ν• λ‹Ήλœ 객체 μ˜μ—­μ„ μ •κΈ°μ μœΌλ‘œ λΉ„μš°κ³  살아남은 객체λ₯Ό λ‹€λ₯Έ μ˜μ—­μ΄λ‚˜ κ΅¬μ„ΈλŒ€λ‘œ μ΄λ™μ‹œν‚¨λ‹€λŠ” μŠ€μΊλΉˆμ €μ˜ κΈ°λ³Έ λ™μž‘ 원리와 λͺ©μ μ€ λ™μΌν•©λ‹ˆλ‹€ [2, 3, 6]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/μŠ€μΊλΉˆμ €(Scavenger) _ λ§ˆμ΄λ„ˆ GC.md ---