--- id: P-REINFORCE-AUTO-2240C5 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Write Barrier" --- # [[Write Barrier|Write Barrier]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Write Barrier(μ“°κΈ° μž₯λ²½)λŠ” κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) μ‹œμŠ€ν…œμ—μ„œ 객체에 μƒˆλ‘œμš΄ 포인터(μ°Έμ‘°)κ°€ μ €μž₯될 λ•Œλ§ˆλ‹€ 이λ₯Ό κ°μ§€ν•˜κ³  κΈ°λ‘ν•˜κΈ° μœ„ν•΄ μ‹€ν–‰λ˜λŠ” 짧은 μ½”λ“œ μ‘°κ°μž…λ‹ˆλ‹€ [1]. 주둜 ꡬ μ„ΈλŒ€(Old-space) 객체가 μ‹ κ·œ μ„ΈλŒ€(New-space) 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 것을 μΆ”μ ν•˜κ±°λ‚˜, 점진적/λ™μ‹œμ„± λ§ˆν‚Ή(Incremental/Concurrent marking) 쀑에 λ³€κ²½λœ 객체 κ·Έλž˜ν”„λ₯Ό μΆ”μ ν•˜λŠ” 데 ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€ [1-3]. 이λ₯Ό 톡해 κ°€λΉ„μ§€ 컬렉터가 λ©”λͺ¨λ¦¬ νž™ 전체λ₯Ό 무거운 λΉ„μš©μœΌλ‘œ μŠ€μΊ”ν•˜μ§€ μ•Šκ³ λ„ μ‚΄μ•„μžˆλŠ” 객체λ₯Ό μ •ν™•ν•˜κ³  λΉ λ₯΄κ²Œ 식별할 수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€ [4, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **μ„ΈλŒ€ κ°„ μ°Έμ‘° 좔적 (Old-to-New Pointers):** V8 엔진이 μ‹ κ·œ 곡간(New-space)을 μŠ€μΊλΉˆμ§€(Scavenge) λ°©μ‹μœΌλ‘œ μˆ˜μ§‘ν•  λ•Œ, ꡬ 곡간(Old-space)의 객체가 μ‹ κ·œ 곡간 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터λ₯Ό 좔적해야 ν•©λ‹ˆλ‹€ [4]. 전체 ꡬ 곡간을 νƒμƒ‰ν•˜λŠ” 것은 맀우 큰 λΉ„μš©μ„ μˆ˜λ°˜ν•˜λ―€λ‘œ, 객체의 μ°Έμ‘°κ°€ μ €μž₯될 λ•Œ μ“°κΈ° μž₯λ²½(Write barrier) μ½”λ“œκ°€ μ‹€ν–‰λ˜μ–΄ ꡬ κ³΅κ°„μ—μ„œ μ‹ κ·œ κ³΅κ°„μœΌλ‘œ ν–₯ν•˜λŠ” 포인터λ₯Ό μ°Ύμ•„λ‚΄μ–΄ 'μŠ€ν† μ–΄ 버퍼(Store buffer)' 등에 κ·Έ μœ„μΉ˜λ₯Ό 기둝해 λ‘‘λ‹ˆλ‹€ [1, 5]. * **점진적 및 λ™μ‹œμ„± λ§ˆν‚Ή(Marking) μ€‘μ˜ μ°Έμ‘° 무결성 μœ μ§€:** 점진적(Incremental) λ˜λŠ” λ™μ‹œμ„±(Concurrent) λ§ˆν‚Ή κ³Όμ •μ—μ„œλŠ” λ§ˆν‚Ήμ΄ μ§„ν–‰λ˜λŠ” λ™μ•ˆ μžλ°”μŠ€ν¬λ¦½νŠΈ μ‹€ν–‰ 등에 μ˜ν•΄ 객체 κ·Έλž˜ν”„κ°€ 변경될 수 μžˆμŠ΅λ‹ˆλ‹€ [2]. 이미 GC에 μ˜ν•΄ μŠ€μΊ”μ΄ μ™„μ „νžˆ λλ‚œ 객체(Black object)κ°€ μƒˆλ‘­κ²Œ μƒμ„±λ˜κ±°λ‚˜ 아직 μŠ€μΊ”λ˜μ§€ μ•Šμ€ 객체(White object)λ₯Ό μ°Έμ‘°ν•˜κ²Œ 될 경우, μ‚΄μ•„μžˆλŠ” 객체가 죽은 κ²ƒμœΌλ‘œ 였인될 μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€ [2]. μ“°κΈ° μž₯벽은 μ΄λŸ¬ν•œ 'Blackβ†’White' 포인터 생성을 κ°μ§€ν•˜μ—¬, Black 객체λ₯Ό λ‹€μ‹œ μž¬νƒμƒ‰ μƒνƒœ(Grey object)둜 λ³€κ²½ν•˜κ³  λ§ˆν‚Ή 데크(Deque)둜 λŒλ €λ³΄λ‚΄ 정상적인 좔적이 μ™„λ£Œλ˜κ²Œ λ§Œλ“­λ‹ˆλ‹€ [2, 3, 6]. * **μ„±λŠ₯ μ˜€λ²„ν—€λ“œμ™€ λŸ°νƒ€μž„ μ΅œμ ν™”:** 포인터가 변경될 λ•Œλ§ˆλ‹€ μΆ”κ°€ λͺ…λ Ή(Instruction)을 μ‹€ν–‰ν•΄μ•Ό ν•˜λ―€λ‘œ μ‹œμŠ€ν…œμ— μ–΄λŠ μ •λ„μ˜ λΉ„μš©(μ˜€λ²„ν—€λ“œ)이 λ°œμƒν•˜μ§€λ§Œ, 일반적으둜 λ©”λͺ¨λ¦¬ μ“°κΈ° μž‘μ—…μ΄ 읽기 μž‘μ—…λ³΄λ‹€ 훨씬 적게 λ°œμƒν•˜λ―€λ‘œ 관리 κ°€λŠ₯ν•œ μˆ˜μ€€μž…λ‹ˆλ‹€ [1]. V8 μ—”μ§„μ—μ„œλŠ” ν¬λž­ν¬μƒ€ν”„νŠΈ(Crankshaft)와 같은 μ»΄νŒŒμΌλŸ¬κ°€ μ΅œμ ν™”λ₯Ό 톡해 객체가 μŠ€νƒμ— ν• λ‹Ήλ˜κ±°λ‚˜ μ‹ κ·œ κ³΅κ°„μ—λ§Œ μ‘΄μž¬ν•¨μ„ ν™•λͺ…ν•  수 μžˆλŠ” 경우, ν•΄λ‹Ή μ €μž₯ μž‘μ—…μ—μ„œ μ“°κΈ° μž₯벽을 μƒλž΅ν•˜μ—¬ μ„±λŠ₯을 κ°œμ„ ν•©λ‹ˆλ‹€ [7]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], Store Buffer, [[Incremental Marking|Incremental Marking]], Concurrent Marking, [[Scavenge|Scavenge]] - **Projects/Contexts:** [[V8 JavaScript Engine|V8 JavaScript Engine]], IBM Eclipse OpenJ9 - **Contradictions/Notes:** μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Write Barrier.md ---