--- id: P-REINFORCE-AUTO-4E47A6 category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - λ§ˆμ΄λ„ˆ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Minor GC)" --- # [[λ§ˆμ΄λ„ˆ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Minor GC)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **λ°œμƒ 쑰건 및 λ©”λͺ¨λ¦¬ 곡간** λ§ˆμ΄λ„ˆ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ€ V8 μ—”μ§„μ˜ 'μƒˆλ‘œμš΄ 곡간(New Space)' ν˜Ήμ€ 'μ Šμ€ μ„ΈλŒ€(Young Generation)'에 객체λ₯Ό ν• λ‹Ήν•  λ•Œ, ν• λ‹Ή 포인터가 κ³΅κ°„μ˜ 끝에 λ„λ‹¬ν•˜μ—¬ μ—¬μœ  λ©”λͺ¨λ¦¬κ°€ 고갈되면 νŠΈλ¦¬κ±°λ©λ‹ˆλ‹€ [1, 2, 7]. 이 곡간은 λΉ λ₯΄κ²Œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ΄ 이루어지도둝 보톡 1MBμ—μ„œ 64MB μ‚¬μ΄μ˜ 비ꡐ적 μž‘μ€ 크기둜 μœ μ§€λ©λ‹ˆλ‹€ [1, 2, 8]. **Scavenge μ•Œκ³ λ¦¬μ¦˜ λ™μž‘ 방식** λ§ˆμ΄λ„ˆ GCλŠ” 'μŠ€μΊλΉˆμ €(Scavenger)' μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 μˆ˜ν–‰λ˜λ©°, V8은 μƒˆλ‘œμš΄ 곡간을 μ •ν™•νžˆ 반으둜 λ‚˜λˆ„μ–΄ 'From-Space'와 'To-Space'λΌλŠ” 두 개의 μ„Έλ―Έ 슀페이슀(Semi-space)둜 μš΄μ˜ν•©λ‹ˆλ‹€ [2, 5]. - **식별(Marking):** GCλŠ” 루트 객체(μŠ€νƒ, μ „μ—­ λ³€μˆ˜ λ“±) 및 κ΅¬μ„ΈλŒ€μ—μ„œ μ‹ μ„ΈλŒ€λ₯Ό μ°Έμ‘°ν•˜λŠ” 포인터듀(μ“°κΈ° μž₯λ²½(Write barrier)을 톡해 κΈ°μ–΅ μ§‘ν•©(Remembered set)으둜 좔적됨)μ—μ„œ μΆœλ°œν•˜μ—¬ μ‚΄μ•„μžˆλŠ”(Live) 객체λ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€ [6, 9, 10]. - **λŒ€ν”Ό 및 볡사(Evacuation):** 살아남은 객체듀은 From-Spaceμ—μ„œ To-Space의 연속적인 λ©”λͺ¨λ¦¬ 청크둜 λ³΅μ‚¬λ˜λ©°, 이 과정을 톡해 λ©”λͺ¨λ¦¬ λ‹¨νŽΈν™”(Fragmentation)κ°€ μ œκ±°λ©λ‹ˆλ‹€ [5, 6, 11]. - **승격(Promotion):** 두 번의 λ§ˆμ΄λ„ˆ GC 사이클을 κ±°μΉ˜λ©΄μ„œλ„ 살아남은 κ°μ²΄λŠ” 수λͺ…이 κΈ΄ 객체둜 κ°„μ£Όλ˜μ–΄ κ΅¬μ„ΈλŒ€(Old Space)둜 μŠΉκ²©λ©λ‹ˆλ‹€ [1, 4, 6]. - **μŠ€μ™‘(Swap):** 볡사가 μ™„λ£Œλ˜λ©΄ From-Space에 남은 λ‚΄μš©μ€ λͺ¨λ‘ κ°€λΉ„μ§€λ‘œ κ°„μ£Όλ˜μ–΄ μ™„μ „νžˆ λΉ„μ›Œμ§€κ³ , 두 슀페이슀의 역할이 μ„œλ‘œ λ°”λ€λ‹ˆλ‹€ [6, 9, 12]. 이후 μƒˆλ‘œμš΄ 객체 할당은 λΉ„μ›Œμ§„ From-Spaceμ—μ„œ μž¬κ°œλ©λ‹ˆλ‹€ [9]. **병렬 처리 및 μ΅œμ ν™”** 과거의 λ§ˆμ΄λ„ˆ GCλŠ” μ²΄λ‹ˆ μ•Œκ³ λ¦¬μ¦˜(Cheney's algorithm)에 κΈ°λ°˜ν•˜μ—¬ 동기식(Synchronous)으둜 λ™μž‘ν•˜λ©° 메인 μŠ€λ ˆλ“œλ₯Ό λ©ˆμΆ”κ²Œ(Stop-the-world) ν–ˆμŠ΅λ‹ˆλ‹€ [7, 13]. ν•˜μ§€λ§Œ μ΅œμ‹  V8 μ—”μ§„(예: Orinoco ν”„λ‘œμ νŠΈ)은 병렬 μŠ€μΊλΉˆμ €(Parallel Scavenger)λ₯Ό λ„μž…ν•˜μ˜€μŠ΅λ‹ˆλ‹€ [13, 14]. 이 방식은 메인 μŠ€λ ˆλ“œμ™€ μ—¬λŸ¬ 헬퍼 μŠ€λ ˆλ“œμ— 걸쳐 μž‘μ—…μ„ λΆ„μ‚°μ‹œν‚€λ©°, 각 μŠ€λ ˆλ“œκ°€ 객체λ₯Ό λ™μ‹œμ— 식별, 볡사, λŒ€ν”Όμ‹œν‚€κ³  포인터λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [10, 14, 15]. μ΄λŸ¬ν•œ 병렬화λ₯Ό 톡해 κ°€λΉ„μ§€ 컬렉터가 메인 μŠ€λ ˆλ“œμ—μ„œ μ°¨μ§€ν•˜λŠ” μ‹œκ°„μ„ 20%~50%κΉŒμ§€ 크게 λ‹¨μΆ•ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μΌμ‹œ μ •μ§€(Pause) ν˜„μƒμ„ μ€„μ˜€μŠ΅λ‹ˆλ‹€ [16, 17]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[μƒˆλ‘œμš΄ 곡간(New Space)]], [[κ΅¬μ„ΈλŒ€(Old Space)]], [[μ„ΈλŒ€λ³„ κ°€μ„€(Generational Hypothesis)]], [[μŠ€μΊλΉˆμ €(Scavenger)]], [[μ“°κΈ° μž₯λ²½(Write Barrier)]] - **Projects/Contexts:** [[V8 JavaScript Engine]], [[Orinoco Garbage Collector]] - **Contradictions/Notes:** 초기 V8 λ²„μ „μ—μ„œλŠ” λ§ˆμ΄λ„ˆ GCλ₯Ό μœ„ν•΄ 단일 μŠ€λ ˆλ“œλ‘œ λ™μž‘ν•˜λŠ” 동기식 μ²΄λ‹ˆ μ•Œκ³ λ¦¬μ¦˜(Cheney's algorithm)을 μ‚¬μš©ν–ˆμ§€λ§Œ, μ΅œμ‹  λ²„μ „μ—μ„œλŠ” λ©€ν‹°μ½”μ–΄ ν™˜κ²½μ— 맞좰 μž‘μ—… ν›”μΉ˜κΈ°(work stealing) 기법을 ν™œμš©ν•˜λŠ” 병렬 μŠ€μΊλΉˆμ €(Parallel Scavenger)둜 λ°œμ „ν–ˆμŠ΅λ‹ˆλ‹€ [7, 13]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/λ§ˆμ΄λ„ˆ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Minor GC).md]] ---