--- id: P-REINFORCE-AUTO-50957B 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(메이저 GC)" --- # [[Mark-Sweep-Compact(α„†α…¦α„‹α…΅α„Œα…₯ GC)|Mark-Sweep-Compact(메이저 GC)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Mark-Sweep-Compact(메이저 GC)λŠ” λ©”λͺ¨λ¦¬ νž™μ˜ 전체 μ˜μ—­(주둜 Old μ„ΈλŒ€ 곡간)μ—μ„œ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 객체λ₯Ό 식별해 λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜κ³  λ‹¨νŽΈν™”λ₯Ό ν•΄μ†Œν•˜λŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€ [1-3]. 이 μ•Œκ³ λ¦¬μ¦˜μ€ μ‚΄μ•„μžˆλŠ” 객체λ₯Ό μ‹λ³„ν•˜λŠ” λ§ˆν‚Ή(Marking), 죽은 객체의 λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜λŠ” μŠ€μœ„ν•‘(Sweeping), 그리고 살아남은 객체듀을 ν•œκ³³μœΌλ‘œ λͺ¨μ•„ λ©”λͺ¨λ¦¬ λ‹¨νŽΈν™”λ₯Ό μ€„μ΄λŠ” μ»΄νŒ©νŒ…(Compacting)의 μ„Έ κ°€μ§€ 핡심 λ‹¨κ³„λ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€ [2-4]. 주둜 크기가 크고 수λͺ…이 κΈ΄ 객체듀이 μ €μž₯λ˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ˜ 효율적인 μž¬μ‚¬μš©μ„ μœ„ν•΄ μž‘λ™ν•©λ‹ˆλ‹€ [1, 5, 6]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **λ§ˆν‚Ή(Marking) 단계** * κ°€λΉ„μ§€ 컬렉터가 λ©”λͺ¨λ¦¬ μƒμ—μ„œ 도달 κ°€λŠ₯ν•œ(μ‚΄μ•„μžˆλŠ”) 객체λ₯Ό μ‹λ³„ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [2, 3]. * μ „μ—­ κ°μ²΄λ‚˜ μ‹€ν–‰ μŠ€νƒκ³Ό 같은 루트 객체(Root object)μ—μ„œ μ‹œμž‘ν•˜μ—¬ μ°Έμ‘° 포인터λ₯Ό 따라가며 νž™ λ‚΄μ˜ λͺ¨λ“  도달 κ°€λŠ₯ν•œ 객체λ₯Ό μž¬κ·€μ μœΌλ‘œ μ°Ύμ•„λƒ…λ‹ˆλ‹€ [3, 7, 8]. * V8 μ—”μ§„μ—μ„œλŠ” 객체의 μƒνƒœλ₯Ό 흰색(미발견), νšŒμƒ‰(λ°œκ²¬λ˜μ—ˆμœΌλ‚˜ 이웃 λ…Έλ“œ 미처리), 검은색(이웃 λ…Έλ“œκΉŒμ§€ λͺ¨λ‘ 처리)으둜 λΆ„λ₯˜ν•˜λ©° 깊이 μš°μ„  탐색(DFS) μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•΄ λ§ˆν‚Ήμ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [7, 9]. JVM ν™˜κ²½μ—μ„œλŠ” 마크 λ§΅(Mark map)μ΄λΌλŠ” λΉ„νŠΈ 배열을 μ΄μš©ν•΄ 도달 κ°€λŠ₯ν•œ 객체의 μœ„μΉ˜λ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€ [10]. * **μŠ€μœ„ν•‘(Sweeping) 단계** * λ§ˆν‚Ή 단계λ₯Ό 톡해 도달 λΆˆκ°€λŠ₯ν•œ κ²ƒμœΌλ‘œ νŒλ³„λœ 죽은 κ°μ²΄λ“€μ˜ λ©”λͺ¨λ¦¬ 곡간을 νšŒμˆ˜ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [2, 3, 11]. * V8 엔진은 λ©”λͺ¨λ¦¬ νŽ˜μ΄μ§€λ₯Ό μŠ€μΊ”ν•˜μ—¬ μ—°μ†λœ 죽은 객체의 λ²”μœ„λ₯Ό μ°Ύκ³ , 이λ₯Ό μ—¬μœ  κ³΅κ°„μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ 자유 λͺ©λ‘(Free list)에 μΆ”κ°€ν•¨μœΌλ‘œμ¨ μƒˆλ‘œμš΄ 객체 ν• λ‹Ή μ‹œ μž¬μ‚¬μš©λ  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€ [11, 12]. JVMμ—μ„œλ„ 마크 맡을 뢄석해 확보 κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬λ₯Ό μ‹λ³„ν•˜κ³  자유 λͺ©λ‘μ„ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€ [13]. * **μ»΄νŒ©νŒ…(Compacting) 단계** * μŠ€μœ„ν•‘ 이후 νž™ λ©”λͺ¨λ¦¬κ°€ μ‹¬ν•˜κ²Œ λ‹¨νŽΈν™”(Fragmented)λ˜μ–΄ μžˆλŠ” 경우, μ‚΄μ•„μžˆλŠ” 객체듀을 λ‹€λ₯Έ μ—¬μœ  κ³΅κ°„μ΄λ‚˜ 빈 νŽ˜μ΄μ§€λ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜μ—¬ λ©”λͺ¨λ¦¬ ꡬ멍을 μ—†μ• λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [2, 11, 14, 15]. * μ‚΄μ•„μžˆλŠ” 객체λ₯Ό μƒˆ μœ„μΉ˜λ‘œ λ³΅μ‚¬ν•œ λ’€, ν•΄λ‹Ή 객체듀을 κ°€λ¦¬ν‚€λ˜ λͺ¨λ“  포인터(μ°Έμ‘°)λ₯Ό μƒˆλ‘œμš΄ μ£Όμ†Œλ‘œ 일일이 μ—…λ°μ΄νŠΈν•΄μ•Ό ν•˜λ―€λ‘œ 맀우 λΉ„μš©μ΄ 큰 μž‘μ—…μž…λ‹ˆλ‹€ [11, 14, 16]. * μ΄λŸ¬ν•œ 높은 처리 λΉ„μš© λ•Œλ¬Έμ— λ§€ μˆ˜μ§‘ μ£ΌκΈ°λ§ˆλ‹€ μ‹€ν–‰λ˜μ§€ μ•ŠμœΌλ©°, νŠΉμ • 쑰건(예: -Xcompactgc μ˜΅μ…˜ ν™œμ„±ν™”, ν• λ‹Ήν•  μΆ©λΆ„ν•œ μ—¬μœ  곡간 λΆ€μ‘±, 곡간 λ‹¨νŽΈν™” 심화 λ“±)에 따라 선택적이고 μ œν•œμ μœΌλ‘œ μˆ˜ν–‰λ©λ‹ˆλ‹€ [6, 16, 17]. * **μ„±λŠ₯ μ΅œμ ν™”(Optimization) 기법** * 메이저 GC의 마크-μŠ€μœ„ν”„-컴팩트 μž‘μ—…μ€ λ‹€λŸ‰μ˜ 데이터λ₯Ό μŠ€μΊ”ν•΄μ•Ό ν•˜λ―€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 싀행을 κΈ΄ μ‹œκ°„ λ™μ•ˆ λ©ˆμΆ”κ²Œ(Stop-the-world) ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 18]. * 이λ₯Ό λ°©μ§€ν•˜κ³  μ§€μ—° μ‹œκ°„(Latency)을 μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄, V8의 μ΅œμ‹  GC(Orinoco) 및 νŠΉμ • JVM 정책은 μž‘μ—…μ„ μ—¬λŸ¬ 번 λ‚˜λˆ„μ–΄ μˆ˜ν–‰ν•˜λŠ” 점진적 λ§ˆν‚Ή(Incremental marking)κ³Ό νž™ νŽ˜μ΄μ§€μ˜ μ²­μ†Œλ₯Ό μ§€μ—°μ‹œν‚€λŠ” μ§€μ—° μŠ€μœ„ν•‘(Lazy sweeping) 기법을 μ‚¬μš©ν•©λ‹ˆλ‹€ [18-21]. * 더 λ‚˜μ•„κ°€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 메인 μŠ€λ ˆλ“œμ™€ μ—¬λŸ¬ 헬퍼 μŠ€λ ˆλ“œλ₯Ό λ™μ‹œμ— ν™œμš©ν•˜λŠ” 병렬(Parallel) 및 λ™μ‹œ(Concurrent) 처리 기법을 μ μš©ν•˜μ—¬ 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μΌμ‹œ μ •μ§€ μ‹œκ°„μ„ 획기적으둜 쀄이고 μžˆμŠ΅λ‹ˆλ‹€ [22-25]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], [[α„‹α…΅α„Œα…₯ᆫ 세ᄃᅒ(Old Generation_Space)|Old Generation/Space]], Memory Fragmentation, [[Incremental Marking|Incremental Marking]] - **Projects/Contexts:** V8 Engine (JavaScript), JVM (Java Virtual Machine), Orinoco Garbage Collector - **Contradictions/Notes:** μ†ŒμŠ€ 자료 μ „λ°˜μ— 걸쳐 큰 λͺ¨μˆœμ€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ, μ»΄νŒ©νŒ…(Compacting) μž‘μ—…μ€ λ©”λͺ¨λ¦¬ νŒŒνŽΈν™”λ₯Ό μ™„μ „νžˆ ν•΄κ²°ν•˜λŠ” ν›Œλ₯­ν•œ λ°©λ²•μ΄μ§€λ§Œ V8κ³Ό JVM 두 ν™˜κ²½ λͺ¨λ‘μ—μ„œ 맀우 무겁고 κ°’λΉ„μ‹Ό(expensive) λ™μž‘μœΌλ‘œ κ³΅ν†΅λ˜κ²Œ μ·¨κΈ‰λ˜λ©°, 항상 μ‹€ν–‰λ˜μ§€ μ•Šκ³  μ² μ €ν•œ νœ΄λ¦¬μŠ€ν‹±μ΄λ‚˜ μž„κ³„μ‘°κ±΄μ— μ˜ν•΄ μ„ νƒμ μœΌλ‘œ λ°œλ™λœλ‹€λŠ” 점이 κ°•μ‘°λ©λ‹ˆλ‹€ [6, 16, 17]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Mark-Sweep-Compact(메이저 GC).md ---