--- id: P-REINFORCE-AUTO-1D592D 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]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **λ™μž‘ 원리 및 μ£Όμš” 단계** * **λ§ˆν‚Ή(Marking) 단계:** νž™ μƒμ˜ λͺ¨λ“  ν™œμ„±(Live) 객체λ₯Ό λ°œκ²¬ν•˜κ³  ν‘œμ‹œν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [3]. λ©”λͺ¨λ¦¬ νž™μ„ 객체듀이 ν¬μΈν„°λ‘œ μ—°κ²°λœ λ°©ν–₯μ„± κ·Έλž˜ν”„λ‘œ κ°„μ£Όν•˜μ—¬, 루트(root) κ°μ²΄μ—μ„œ μ‹œμž‘ν•΄ 깊이 μš°μ„  탐색(Depth-First-Search)을 μˆ˜ν–‰ν•©λ‹ˆλ‹€ [8, 9]. κ°μ²΄λŠ” 처리 μƒνƒœμ— 따라 흰색(미발견), νšŒμƒ‰(λ°œκ²¬λ˜μ—ˆμœΌλ‚˜ 이웃 미처리), 검은색(발견 및 이웃 처리 μ™„λ£Œ)으둜 κ΅¬λΆ„λ©λ‹ˆλ‹€ [3, 10]. λ§ˆν‚Ήμ΄ μ’…λ£Œλ˜λ©΄ 검은색은 ν™œμ„± 객체, 흰색은 죽은 객체λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€ [4, 11]. * **μŠ€μœ„ν•‘(Sweeping) 단계:** λ§ˆν‚Ή 맡을 μŠ€μΊ”ν•˜μ—¬ λ§ˆν‚Ήλ˜μ§€ μ•Šμ€(흰색) 죽은 κ°μ²΄λ“€μ˜ μ—°μ†λœ λ²”μœ„λ₯Ό μ°Ύκ³ , 이λ₯Ό 빈 곡간(Free space)으둜 λ³€ν™˜ν•˜μ—¬ 크기별 프리 리슀트(Free lists)에 μΆ”κ°€ν•©λ‹ˆλ‹€ [4, 12, 13]. * **μ»΄νŒ©νŒ…(Compacting) 단계:** νŒŒνŽΈν™”κ°€ μ‹¬ν•œ νŽ˜μ΄μ§€μ— μžˆλŠ” 객체듀을 λ‹€λ₯Έ νŽ˜μ΄μ§€μ˜ 빈 κ³΅κ°„μœΌλ‘œ 이주(Migration)μ‹œμΌœ μ‹€μ œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ μ€„μž…λ‹ˆλ‹€ [5, 14]. 객체가 λ³΅μ‚¬λœ ν›„ κΈ°μ‘΄ 객체의 첫 번째 μ›Œλ“œμ— ν¬μ›Œλ”© μ£Όμ†Œ(Forwarding address)λ₯Ό 남기고, λŒ€ν”Όκ°€ μ™„λ£Œλ˜λ©΄ μ‹œμŠ€ν…œμ€ 기둝된 포인터 μœ„μΉ˜λ₯Ό μˆœνšŒν•˜λ©° μ°Έμ‘°λ₯Ό μƒˆ μœ„μΉ˜λ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [5, 10]. **V8 μ—”μ§„μ—μ„œμ˜ ν™œμš© (Major GC)** * V8 μ—”μ§„μ—μ„œλŠ” λ©”κ°€λ°”μ΄νŠΈ λ‹¨μœ„ μ΄μƒμ˜ 크기λ₯Ό κ°–λŠ” 'Old Space(였래된 μ„ΈλŒ€)'λ₯Ό μˆ˜μ§‘ν•  λ•Œ 마크-μŠ€μœ•(Mark-sweep) 및 마크-컴팩트(Mark-compact) μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€ [1, 10]. * κ³Όκ±°μ—λŠ” 전체 싀행을 λ©ˆμΆ”λŠ” "Stop-the-world" λ°©μ‹μœΌλ‘œ 인해 500-1000ms의 κΈ΄ μΌμ‹œ μ •μ§€κ°€ λ°œμƒν–ˆμœΌλ‚˜, 메인 μŠ€λ ˆλ“œμ˜ 뢀담을 쀄이기 μœ„ν•΄ 증뢄 λ§ˆν‚Ή(Incremental marking)κ³Ό μ§€μ—° μŠ€μœ„ν•‘(Lazy sweeping), 그리고 λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ₯Ό ν™œμš©ν•˜λŠ” λ™μ‹œ λ§ˆν‚Ή/μŠ€μœ„ν•‘(Concurrent marking/sweeping) λ“±μ˜ μ΅œμ ν™”κ°€ λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [15-18]. **IBM Java GCμ—μ„œμ˜ ν™œμš©** * Java κ°€λΉ„μ§€ μ»¬λ ‰ν„°μ—μ„œλ„ λ§ˆν¬μ™€ μŠ€μœ•μ€ λ©”λͺ¨λ¦¬λ₯Ό μž¬ν™•λ³΄ν•˜λŠ” 핡심 μ‚¬μ΄ν΄λ‘œ ν•¨κ»˜ μž‘λ™ν•©λ‹ˆλ‹€ [19]. * κ·ΈλŸ¬λ‚˜ 컴팩트(Compact) μž‘μ—…μ€ 객체의 μ°Έμ‘°(Reference)λ₯Ό λͺ¨λ‘ λ³€κ²½ν•΄μ•Ό ν•˜λ―€λ‘œ 맀우 λΉ„μš©μ΄ 많이 λ“œλŠ”(Expensive) μž‘μ—…μœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€ [7]. λ”°λΌμ„œ 컴팩트 μž‘μ—…μ€ 기본적으둜 맀번 λ°œμƒν•˜μ§€ μ•ŠμœΌλ©°, `-Xcompactgc` μ˜΅μ…˜μ„ λͺ…μ‹œν•˜κ±°λ‚˜ νž™μ„ μŠ€μœ„ν•‘ν•œ 후에도 ν• λ‹Ή μš”μ²­μ„ μΆ©μ‘±ν•  곡간이 λΆ€μ‘±ν•  λ•Œ λ“± νŠΉμ •ν•œ 트리거 쑰건 ν•˜μ—μ„œλ§Œ μˆ˜ν–‰λ©λ‹ˆλ‹€ [7, 20]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection]], [[Old Generation]], [[Incremental Marking]], [[Memory Fragmentation]] - **Projects/Contexts:** [[V8 JavaScript Engine]], [[IBM Java GC]], [[Orinoco Garbage Collector]] - **Contradictions/Notes:** 컴팩트(Compact) λ‹¨κ³„μ˜ λΉˆλ„μ™€ κ΄€λ ¨ν•˜μ—¬, V8μ—μ„œλŠ” Old Space의 νŒŒνŽΈν™”λ₯Ό 쀄이기 μœ„ν•΄ Major GC κ³Όμ •μ—μ„œ μ»΄νŒ©νŒ…μ„ ν†΅ν•©μ μœΌλ‘œ ν™œμš©ν•˜μ—¬ 객체λ₯Ό λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” 반면 [5, 10], IBM Java GC ν™˜κ²½μ—μ„œλŠ” 객체 이동에 λ”°λ₯Έ 높은 μ˜€λ²„ν—€λ“œλ‘œ 인해 컴팩트 단계가 κΈ°λ³Έ ν™œμ„±ν™” μƒνƒœκ°€ μ•„λ‹ˆλ©° λ©”λͺ¨λ¦¬ λΆ€μ‘±μ΄λ‚˜ λͺ…μ‹œμ  μ„€μ • μ‹œμ—λ§Œ μ œν•œμ μœΌλ‘œ νŠΈλ¦¬κ±°λœλ‹€λŠ” 차이가 μžˆμŠ΅λ‹ˆλ‹€ [7, 21]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/Mark-Sweep-Compact.md]] ---