--- id: P-REINFORCE-AUTO-261A28 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" --- # [[Mark-Sweep]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Mark-Sweep(마크-μŠ€μœ„ν”„)λŠ” V8 μ—”μ§„κ³Ό JVM λ“±μ—μ„œ 였래된 객체(Old Space/Generation)의 λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜κΈ° μœ„ν•΄ 주둜 μ‚¬μš©λ˜λŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€ [1-4]. 이 μ•Œκ³ λ¦¬μ¦˜μ€ νž™ λ©”λͺ¨λ¦¬ λ‚΄μ˜ λͺ¨λ“  ν™œμ„± 객체λ₯Ό μ‹λ³„ν•˜μ—¬ ν‘œμ‹œν•˜λŠ” 'λ§ˆν‚Ή(Marking)' 단계와, ν‘œμ‹œλ˜μ§€ μ•Šμ€ 죽은 객체의 λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν•΄μ œν•˜λŠ” 'μŠ€μœ„ν•‘(Sweeping)' λ‹¨κ³„λ‘œ λ™μž‘ν•©λ‹ˆλ‹€ [2, 5]. κΈ°μ‘΄μ—λŠ” κΈ΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μΌμ‹œ μ •μ§€(Stop-the-world)λ₯Ό μœ λ°œν–ˆμœΌλ‚˜, ν˜„λŒ€μ˜ 엔진듀은 점진적(Incremental), μ§€μ—°(Lazy), 그리고 병행(Concurrent) 처리 기법을 κ²°ν•©ν•˜μ—¬ μ„±λŠ₯ μ˜€λ²„ν—€λ“œλ₯Ό 크게 μ€„μ˜€μŠ΅λ‹ˆλ‹€ [6-9]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **λ§ˆν‚Ή(Marking) 단계** * λ§ˆν‚Ή μ•Œκ³ λ¦¬μ¦˜μ€ 본질적으둜 ν¬μΈν„°λ‘œ μ—°κ²°λœ 객체 κ·Έλž˜ν”„λ₯Ό 루트(Roots)μ—μ„œλΆ€ν„° μΆ”μ ν•˜λŠ” 깊이 μš°μ„  탐색(Depth-First-Search)μž…λ‹ˆλ‹€ [4, 10, 11]. * V8 μ—”μ§„μ—μ„œλŠ” 각 νŽ˜μ΄μ§€μ— ν• λ‹Ή κ°€λŠ₯ν•œ 단어(word)λ‹Ή ν•˜λ‚˜μ˜ λΉ„νŠΈλ₯Ό κ°–λŠ” λ§ˆν‚Ή λΉ„νŠΈλ§΅(Marking bitmap)을 μœ μ§€ν•˜λ©°, 객체의 λ§ˆν‚Ή μƒνƒœλ₯Ό μ„Έ κ°€μ§€ 색상(흰색, νšŒμƒ‰, 검은색)으둜 λΆ„λ₯˜ν•©λ‹ˆλ‹€ [4, 12]. * 흰색(White)은 아직 GCκ°€ λ°œκ²¬ν•˜μ§€ λͺ»ν•œ μƒνƒœ, νšŒμƒ‰(Grey)은 λ°œκ²¬λ˜μ—ˆμœΌλ‚˜ 이웃 객체듀이 λͺ¨λ‘ μ²˜λ¦¬λ˜μ§€ μ•Šμ€ μƒνƒœ, 검은색(Black)은 λ°œκ²¬λ˜μ—ˆκ³  λͺ¨λ“  이웃 κ°μ²΄κΉŒμ§€ μ²˜λ¦¬κ°€ μ™„λ£Œλœ ν™œμ„± μƒνƒœλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€ [12, 13]. * λ§ˆν‚Ή κ³Όμ • 쀑 객체듀은 'λ§ˆν‚Ή 데크(Marking deque)'λΌλŠ” 버퍼에 μ €μž₯되며, 큐가 λΉ„μ›Œμ§€κ³  λͺ¨λ“  발견된 객체가 κ²€μ€μƒ‰μœΌλ‘œ ν‘œμ‹œλ  λ•ŒκΉŒμ§€ 탐색이 λ°˜λ³΅λ©λ‹ˆλ‹€ [10, 13]. * **μŠ€μœ„ν•‘(Sweeping) 단계** * λ§ˆν‚Ήμ΄ μ™„λ£Œλœ ν›„, μŠ€μœ„ν•‘ μ•Œκ³ λ¦¬μ¦˜μ€ νž™μ„ μŠ€μΊ”ν•˜μ—¬ ν°μƒ‰μœΌλ‘œ 남은 죽은 κ°μ²΄λ“€μ˜ μ—°μ†λœ λ²”μœ„λ₯Ό μ°Ύμ•„λƒ…λ‹ˆλ‹€ [4, 14, 15]. * ν™•μΈλœ 죽은 객체의 λ©”λͺ¨λ¦¬ 곡간을 μ—¬μœ  곡간(Free space)으둜 λ³€ν™˜ν•˜κ³  이λ₯Ό '자유 λͺ©λ‘(Free list)'에 μΆ”κ°€ν•˜μ—¬ μƒˆλ‘œμš΄ 객체 ν• λ‹Ή μ‹œ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€ [14-16]. * V8μ—μ„œλŠ” νŽ˜μ΄μ§€ μˆ˜μ€€μ—μ„œ μž‘λ™ν•˜λ©°, 객체의 크기(μ†Œν˜•, μ€‘ν˜•, λŒ€ν˜• λ“±)에 따라 λ³„λ„μ˜ 자유 λͺ©λ‘μ„ μœ μ§€ κ΄€λ¦¬ν•©λ‹ˆλ‹€ [14, 16]. * **μ΅œμ ν™” 및 λ°œμ „ (Optimization)** * 전체 νž™μ„ λŒ€μƒμœΌλ‘œ ν•˜λŠ” 마크-μŠ€μœ„ν”„λŠ” μ‹œκ°„μ΄ 였래 κ±Έλ € 500-1000ms μˆ˜μ€€μ˜ 'Stop-the-world' μΌμ‹œ μ •μ§€λ₯Ό μœ λ°œν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€ [6]. * 이λ₯Ό μ™„ν™”ν•˜κΈ° μœ„ν•΄ V8은 νž™ λ§ˆν‚Ήμ„ 5-10ms λ‹¨μœ„μ˜ μž‘μ€ μž‘μ—…μœΌλ‘œ λ‚˜λˆ„μ–΄ μ‹€ν–‰ν•˜λŠ” **점진적 λ§ˆν‚Ή(Incremental marking)**κ³Ό λ©”λͺ¨λ¦¬ ν•΄μ œλ₯Ό μ¦‰μ‹œ μ „λΆ€ μˆ˜ν–‰ν•˜μ§€ μ•Šκ³  ν•„μš”μ— 따라 λ―Έλ£¨λŠ” **μ§€μ—° μŠ€μœ„ν•‘(Lazy sweeping)**을 λ„μž…ν–ˆμŠ΅λ‹ˆλ‹€ [6, 7, 17, 18]. * 졜근의 Orinoco κ°€λΉ„μ§€ 컬렉터 및 JVM μ •μ±…μ—μ„œλŠ” 메인 μŠ€λ ˆλ“œ 싀행에 영ν–₯을 μ£Όμ§€ μ•ŠκΈ° μœ„ν•΄ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ—μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” **병행(Concurrent) λ§ˆν‚Ή 및 μŠ€μœ„ν•‘** κΈ°μˆ μ„ ν™œμš©ν•˜μ—¬ λŒ€κΈ° μ‹œκ°„μ„ 획기적으둜 μ΅œμ†Œν™”ν–ˆμŠ΅λ‹ˆλ‹€ [8, 9, 19]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection]], Old Generation, Mark-Compact, [[Incremental Marking]], Lazy Sweeping - **Projects/Contexts:** [[V8 JavaScript Engine]], JVM (Java Virtual Machine), Orinoco Garbage Collector - **Contradictions/Notes:** 마크-μŠ€μœ„ν”„λŠ” λΉ λ₯΄κ³  곡간을 효과적으둜 μž¬ν™œμš©ν•˜μ§€λ§Œ, λ©”λͺ¨λ¦¬ νŒŒνŽΈν™”(Fragmentation)λ₯Ό μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ V8μ—μ„œλŠ” νŒŒνŽΈν™”κ°€ μ‹¬ν•œ νŽ˜μ΄μ§€μ˜ 라이브 객체λ₯Ό μ΄λ™μ‹œν‚€κ³  빈 곡간을 λ³‘ν•©ν•˜λŠ” Mark-Compact μ•Œκ³ λ¦¬μ¦˜κ³Ό λ°€μ ‘ν•˜κ²Œ μ—°κ³„λ˜μ–΄ μ‚¬μš©λ©λ‹ˆλ‹€ [2, 4, 5, 20]. λ˜ν•œ, Node.js ν™˜κ²½μ—μ„œ `--trace_gc` 둜그 상에 'Mark-sweep'이 μ§€λ‚˜μΉ˜κ²Œ 자주 λ°œμƒν•˜κ±°λ‚˜ λ°˜ν™˜λ˜λŠ” λ©”λͺ¨λ¦¬κ°€ λ―Έλ―Έν•˜λ‹€λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)λ‚˜ CPU 집약적 λΈ”λ‘œν‚Ή μž‘μ—…μ΄ μ‘΄μž¬ν•  κ°€λŠ₯성이 λ†’μŠ΅λ‹ˆλ‹€ [21, 22]. --- *Last updated: 2026-04-19* ---