--- id: P-REINFORCE-AUTO-A29470 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Incremental Marking" --- # [[Incremental Marking|Incremental Marking]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Incremental Marking은 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ λ§ˆν‚Ή 단계λ₯Ό ν•œ 번의 κΈ΄ μΌμ‹œ μ •μ§€(stop-the-world)둜 μ²˜λ¦¬ν•˜μ§€ μ•Šκ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰κ³Ό κ΅μ°¨ν•˜μ—¬ μ—¬λŸ¬ 개의 짧은 μž‘μ—… λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μˆ˜ν–‰ν•˜λŠ” λ©”λͺ¨λ¦¬ 관리 κΈ°λ²•μž…λ‹ˆλ‹€ [1, 2]. 이 방식은 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ— μ†Œμš”λ˜λŠ” 전체 μ‹œκ°„μ„ μ€„μ΄μ§€λŠ” μ•Šμ§€λ§Œ, μž‘μ—…μ„ μ‹œκ°„μ— 따라 λΆ„μ‚°μ‹œν‚΄μœΌλ‘œμ¨ 메인 μŠ€λ ˆλ“œμ˜ 응닡성을 크게 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€ [2]. 결과적으둜 λͺ¨λ°”일 κΈ°κΈ° λ“±μ—μ„œ λ°œμƒν•  수 μžˆλŠ” κΈ΄ 지연을 λ°©μ§€ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‚¬μš©μž μž…λ ₯ 및 μ• λ‹ˆλ©”μ΄μ…˜μ— μ›ν™œν•˜κ²Œ λ°˜μ‘ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€ [2, 3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **트리거 및 κΈ°λ³Έ μž‘λ™ 원리:** Incremental Marking은 νž™(heap)의 크기가 νŠΉμ • μž„κ³„κ°’μ— 도달할 λ•Œ ν™œμ„±ν™”λ©λ‹ˆλ‹€ [3, 4]. ν™œμ„±ν™”λœ μ΄ν›„μ—λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•  λ•Œλ§ˆλ‹€ 짧은 λ§ˆν‚Ή 단계(step)κ°€ μ‹€ν–‰λ˜μ–΄, 객체의 생성 속도에 맞좰 λ§ˆν‚Ή ν”„λ‘œμ„ΈμŠ€κ°€ 보쑰λ₯Ό λ§žμΆ”κ²Œ λ©λ‹ˆλ‹€ [1, 4]. 일반적인 λ§ˆν‚Ήκ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ 깊이 μš°μ„  탐색(Depth-First-Search) 기반이며, 객체의 μƒνƒœλ₯Ό 흰색(미발견), νšŒμƒ‰(λ°œκ²¬λ˜μ—ˆμœΌλ‚˜ 이웃 객체 미처리), 검은색(μ™„μ „ 처리됨)으둜 λΆ„λ₯˜ν•˜λŠ” μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•©λ‹ˆλ‹€ [3]. 이 방식을 톡해 κ³Όκ±° 500~1000ms에 λ‹¬ν•˜λ˜ κΈ΄ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μ§€μ—° μ‹œκ°„μ΄ 5~10ms μˆ˜μ€€μ˜ 맀우 짧은 μΌμ‹œ μ •μ§€λ‘œ μͺΌκ°œμ§‘λ‹ˆλ‹€ [3, 4]. - **객체 κ·Έλž˜ν”„μ˜ 동적 λ³€ν™” 및 Write Barrier λ°©μ–΄:** 점진적 λ§ˆν‚Ήμ˜ κ°€μž₯ 큰 λ‚œμ œλŠ” λ§ˆν‚Ή μž‘μ—… 사이사이에 μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ‹€ν–‰λ˜λ―€λ‘œ νž™ λ‚΄μ˜ 객체 κ·Έλž˜ν”„ ꡬ쑰가 계속 λ³€ν•  수 μžˆλ‹€λŠ” μ μž…λ‹ˆλ‹€ [2, 5]. 특히 μ™„μ „νžˆ 검사가 λλ‚œ '검은색' κ°μ²΄μ—μ„œ 아직 λ°œκ²¬λ˜μ§€ μ•Šμ€ '흰색' 객체둜의 μƒˆλ‘œμš΄ 포인터가 생성될 경우, μ‚΄μ•„μžˆλŠ” 흰색 객체가 κ°€λΉ„μ§€λ‘œ 잘λͺ» λΆ„λ₯˜λ  μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€ [5]. V8 엔진은 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 'μ“°κΈ° μž₯λ²½(Write Barrier)'을 μ‚¬μš©ν•˜μ—¬ κ²€μ€μƒ‰μ—μ„œ ν°μƒ‰μœΌλ‘œ ν–₯ν•˜λŠ” 포인터 생성을 κ°μ§€ν•©λ‹ˆλ‹€ [5]. μ΄λŸ¬ν•œ 포인터가 κ°μ§€λ˜λ©΄ ν•΄λ‹Ή 검은색 객체λ₯Ό λ‹€μ‹œ νšŒμƒ‰μœΌλ‘œ λ³€κ²½ν•˜κ³  λ§ˆν‚Ή 덱(deque)에 λ°€μ–΄λ„£μ–΄ μž¬κ²€μƒ‰λ˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€ [5]. - **Lazy Sweeping으둜의 μ „ν™˜:** λͺ¨λ“  객체의 생쑴 μ—¬λΆ€κ°€ μ‹λ³„λ˜μ–΄ Incremental Marking μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄, V8은 ν•œκΊΌλ²ˆμ— λ©”λͺ¨λ¦¬λ₯Ό μ§€μš°μ§€ μ•Šκ³  ν•„μš”μ— 따라 νŽ˜μ΄μ§€ λ‹¨μœ„λ‘œ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜λŠ” 'Lazy Sweeping' 단계λ₯Ό μ‹œμž‘ν•˜μ—¬ 남은 μ˜€λ²„ν—€λ“œλ₯Ό λΆ„μ‚°μ‹œν‚΅λ‹ˆλ‹€ [6, 7]. - **IBM JVMμ—μ„œμ˜ 적용 사둀:** μžλ°”μŠ€ν¬λ¦½νŠΈ μ—”μ§„ 외에도 IBM JVM의 κ· ν˜•(balanced) GC μ •μ±…μ—μ„œ '점진적 λ™μ‹œ λ§ˆν‚Ή(Incremental concurrent mark processing)'이 ν™œμš©λ©λ‹ˆλ‹€ [8, 9]. μ΄λŠ” κΈ€λ‘œλ²Œ λ§ˆν‚Ή μž‘μ—…μ„ 전체 νž™μ— 걸쳐 μ μ§„μ μœΌλ‘œ μˆ˜ν–‰ν•˜λ©°, 뢀뢄적인 GC 사이클과 κ΅μ°¨λ˜μ–΄ κΈ΄ μ •μ§€ μ‹œκ°„μ„ λ°©μ§€ν•©λ‹ˆλ‹€ [8]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], [[Write Barrier|Write Barrier]], Lazy Sweeping, [[Mark-Sweep|Mark-Sweep]], [[Orinoco|Orinoco]] - **Projects/Contexts:** [[V8 JavaScript Engine|V8 JavaScript Engine]], IBM OpenJ9 - **Contradictions/Notes:** V8 μ—”μ§„μ˜ Incremental Marking은 메인 μŠ€λ ˆλ“œκ°€ μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰ 쀑간에 κ°„ν—μ μœΌλ‘œ λ§ˆν‚Ή μž‘μ—…μ„ λ‚˜λˆ„μ–΄ μˆ˜ν–‰ν•˜λŠ” κ΅¬μ‘°μ΄μ§€λ§Œ [2], IBM JVM의 Incremental concurrent mark μž‘μ—…μ—μ„œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μŠ€λ ˆλ“œκ°€ 객체 좔적에 κ΄€μ—¬ν•˜μ§€ μ•ŠμœΌλ©° 였직 λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ§Œμ΄ μ‚¬μš©λœλ‹€λŠ” 기술적 차이가 μ‘΄μž¬ν•©λ‹ˆλ‹€ [8]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Incremental Marking.md ---