--- id: P-REINFORCE-AUTO-AF3315 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Mark-Sweep-Compact μ•Œκ³ λ¦¬μ¦˜" --- # [[Mark-Sweep-Compact α„‹α…‘α†―α„€α…©α„…α…΅α„Œα…³α†·|Mark-Sweep-Compact μ•Œκ³ λ¦¬μ¦˜]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Mark-Sweep-Compact μ•Œκ³ λ¦¬μ¦˜μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ νž™ λ©”λͺ¨λ¦¬μ—μ„œ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 객체λ₯Ό μ‹λ³„ν•˜μ—¬ λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜κ³ , λ°œμƒν•œ λ©”λͺ¨λ¦¬ λ‹¨νŽΈν™”λ₯Ό ν•΄κ²°ν•˜λŠ” μ£Όμš” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) κΈ°λ²•μž…λ‹ˆλ‹€ [1]. 도달 κ°€λŠ₯ν•œ 객체λ₯Ό μ‹λ³„ν•˜μ—¬ ν‘œμ‹œν•˜λŠ” 마크(Mark) 단계, μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” 죽은 객체의 λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜λŠ” μŠ€μœ•(Sweep) 단계, 그리고 살아남은 객체듀을 λͺ¨μ•„ νž™ λ©”λͺ¨λ¦¬ λ‹¨νŽΈν™”λ₯Ό μ€„μ΄λŠ” 컴팩트(Compact) λ‹¨κ³„λ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€ [1]. 이 μ•Œκ³ λ¦¬μ¦˜μ€ 주둜 V8 μ—”μ§„μ˜ Old Generationμ΄λ‚˜ JVM의 μ „μ—­ νž™(Java heap)을 μ •λ¦¬ν•˜λŠ” 데 ν™œμš©λ˜λ©°, λ©”λͺ¨λ¦¬ νš¨μœ¨μ„±μ„ κ·ΉλŒ€ν™”ν•˜μ§€λ§Œ 객체 이동에 λ”°λ₯Έ λΉ„μš©μ΄ ν¬λ‹€λŠ” νŠΉμ§•μ΄ μžˆμŠ΅λ‹ˆλ‹€ [2], [3], [4]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **마크(Mark) 단계**: 루트(Root) κ°μ²΄μ—μ„œ μ‹œμž‘ν•˜μ—¬ 포인터λ₯Ό 톡해 도달할 수 μžˆλŠ” λͺ¨λ“  μ‚΄μ•„μžˆλŠ”(live) 객체λ₯Ό μ‹λ³„ν•˜κ³  λ§ˆν¬ν•©λ‹ˆλ‹€ [5], [1]. - V8 μ—”μ§„μ—μ„œλŠ” 객체의 마크 μƒνƒœλ₯Ό 3κ°€μ§€ μƒνƒœ(흰색: 아직 λ°œκ²¬λ˜μ§€ μ•ŠμŒ, νšŒμƒ‰: λ°œκ²¬λ˜μ—ˆμœΌλ‚˜ 이웃 미처리, 검은색: λͺ¨λ“  이웃 객체 처리 μ™„λ£Œ)둜 κ΅¬λΆ„ν•˜λ©°, νž™μ„ 객체와 ν¬μΈν„°λ‘œ μ—°κ²°λœ λ°©ν–₯ κ·Έλž˜ν”„λ‘œ κ°„μ£Όν•˜μ—¬ 깊이 μš°μ„  탐색(DFS) λ°©μ‹μœΌλ‘œ μˆœνšŒν•©λ‹ˆλ‹€ [6], [5]. - JVM ν™˜κ²½μ—μ„œλŠ” 마크 λ§΅(mark map)μ΄λΌλŠ” λΉ„νŠΈ 배열을 μ‚¬μš©ν•˜μ—¬ 각 객체가 도달 κ°€λŠ₯ν•œ μƒνƒœμΈμ§€ κ·Έ μœ„μΉ˜λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€ [7]. - **μŠ€μœ•(Sweep) 단계**: 마크 단계 μ™„λ£Œ ν›„ λ§ˆν¬λ˜μ§€ μ•Šμ€(흰색) 죽은 κ°μ²΄λ“€μ˜ λ²”μœ„λ₯Ό μ°Ύμ•„ 빈 κ³΅κ°„μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ νšŒμˆ˜ν•©λ‹ˆλ‹€ [8], [9]. μ΄λ ‡κ²Œ ν™•λ³΄λœ μ˜μ—­λ“€μ€ 각 크기에 따라 λΆ„λ¦¬λœ μ—¬μœ  λͺ©λ‘(free lists)에 μΆ”κ°€λ˜μ–΄ 이후 μƒˆλ‘œμš΄ 객체 ν• λ‹Ήμ΄λ‚˜ 객체 이주λ₯Ό μœ„ν•œ κ³΅κ°„μœΌλ‘œ μž¬μ‚¬μš©λ©λ‹ˆλ‹€ [8]. - **컴팩트(Compact) 단계**: μ‚΄μ•„μžˆλŠ” 객체듀을 λ‹€λ₯Έ νŽ˜μ΄μ§€μ˜ 빈 κ³΅κ°„μœΌλ‘œ μ΄λ™μ‹œμΌœ λ‹¨νŽΈν™”λœ λ©”λͺ¨λ¦¬ νŽ˜μ΄μ§€(μž‘μ€ 빈 곡간이 λ§Žμ€ μƒνƒœ)의 μ‹€μ œ μ‚¬μš©λŸ‰μ„ 쀄이고 μ΅œμ ν™”ν•©λ‹ˆλ‹€ [10], [11]. 이 λ‹¨κ³„μ—μ„œλŠ” κΈ°μ‘΄ 객체λ₯Ό λ³΅μ‚¬ν•˜κ³  μ›λ³Έμ˜ 첫 단어 μžλ¦¬μ— ν¬μ›Œλ”© μ£Όμ†Œ(forwarding address)λ₯Ό 남기며, 이주가 λλ‚˜λ©΄ κ΄€λ ¨λœ λͺ¨λ“  포인터λ₯Ό μƒˆλ‘œμš΄ λ³΅μ‚¬λ³Έμ˜ μœ„μΉ˜λ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [10]. - **μ„±λŠ₯κ³Ό μ‹€ν–‰ νŠΉμ§•**: μŠ€μœ• μ•Œκ³ λ¦¬μ¦˜μ€ 각 νŽ˜μ΄μ§€μ˜ 마크 λΉ„νŠΈλ§΅μ„ μˆœνšŒν•˜λ©° λ§ˆν¬λ˜μ§€ μ•Šμ€ 객체의 λ²”μœ„λ₯Ό 찾기만 ν•˜λ―€λ‘œ 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€ [8]. 반면 컴팩트 μž‘μ—…μ€ μ‚΄μ•„μžˆλŠ” λŒ€λŸ‰μ˜ 객체λ₯Ό μ΄λ™μ‹œν‚€κ³  이 객체듀을 κ°€λ¦¬ν‚€λŠ” λͺ¨λ“  μ°Έμ‘°(reference) 값을 λ³€κ²½ν•΄μ•Ό ν•˜λ―€λ‘œ μ—°μ‚° λΉ„μš©μ΄ 맀우 ν½λ‹ˆλ‹€ [3], [4]. λ”°λΌμ„œ 컴팩트 μž‘μ—…μ€ 맀번 μˆ˜ν–‰λ˜μ§€ μ•Šκ³  νž™μ΄ μ‹¬ν•˜κ²Œ λ‹¨νŽΈν™”λ˜μ—ˆκ±°λ‚˜ λ©”λͺ¨λ¦¬ ν• λ‹Ή μ‹€νŒ¨κ°€ λ°œμƒν•˜λŠ” λ“± 선택적이고 ν•„μˆ˜μ μΈ μƒν™©μ—μ„œλ§Œ μ‹€ν–‰λ˜λ„λ‘ μ œμ–΄λ©λ‹ˆλ‹€ [3], [4]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], [[V8 Engine|V8 Engine]], [[Old Space|Old Space]], Java Heap Memory - **Projects/Contexts:** V8 μ—”μ§„μ˜ Old Generation λ©”λͺ¨λ¦¬ 관리, IBM JVM의 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ λ©”μ»€λ‹ˆμ¦˜ - **Contradictions/Notes:** 컴팩트(Compact) μž‘μ—…μ€ λ‹¨νŽΈν™”λ₯Ό ν•΄κ²°ν•˜μ—¬ μΊμ‹œ μ§€μ—­μ„±(cache locality)을 λ†’μ΄μ§€λ§Œ, 포인터 μž¬μ‘°μ •κ³Ό 객체 이동 λΉ„μš©μœΌλ‘œ 인해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 'Stop-the-world(STW)' μΌμ‹œ 쀑지 μ‹œκ°„μ„ μ¦κ°€μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€ [3]. 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ V8 엔진은 객체 κ·Έλž˜ν”„κ°€ 변경될 κ°€λŠ₯성을 μ“°κΈ° μž₯λ²½(Write barrier)으둜 μ œμ–΄ν•˜λ©° 점진적 λ§ˆν‚Ή(Incremental marking) 및 μ§€μ—° μŠ€μœ•(Lazy sweeping) κΈ°μˆ μ„ λ„μž…ν•˜μ—¬ 메인 μŠ€λ ˆλ“œ 멈좀 μ‹œκ°„μ„ 쀄이고 μžˆμŠ΅λ‹ˆλ‹€ [12], [13], [14]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Mark-Sweep-Compact μ•Œκ³ λ¦¬μ¦˜.md ---