--- id: P-REINFORCE-AUTO-51196C category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ (Garbage Collection)" --- # [[κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ (Garbage Collection)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC)은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 더 이상 ν•„μš”ν•˜μ§€ μ•Šκ±°λ‚˜ 도달할 수 μ—†λŠ” 객체가 μ°¨μ§€ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ‹λ³„ν•˜κ³  μžλ™μœΌλ‘œ νšŒμˆ˜ν•˜μ—¬ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” λ©”λͺ¨λ¦¬ 관리 ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€ [1, 2]. ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 직접 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  ν•΄μ œν•΄μ•Ό ν•˜λŠ” λ³΅μž‘μ„±μ„ 쀄여주고 λ©”λͺ¨λ¦¬ λˆ„μˆ˜μ™€ 같은 였λ₯˜λ₯Ό λ°©μ§€ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€ [3]. ν•˜μ§€λ§Œ λ©”λͺ¨λ¦¬ 관리에 λŒ€ν•œ ν†΅μ œκΆŒμ„ μžƒκ²Œ 되며, μ‹œμŠ€ν…œ 싀행을 λ©ˆμΆ”κ²Œ ν•˜λŠ” 예츑 λΆˆκ°€λŠ₯ν•œ μΌμ‹œ μ •μ§€(Stop-The-World)λ₯Ό μœ λ°œν•  수 μžˆλŠ” μ–‘λ‚ μ˜ κ²€κ³Ό 같은 νŠΉμ„±μ„ κ°€μ§‘λ‹ˆλ‹€ [2-4]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **도달 κ°€λŠ₯μ„±(Reachability)κ³Ό 생쑴 객체 식별** κ°€λΉ„μ§€ μ»¬λ ‰ν„°λŠ” '도달 κ°€λŠ₯μ„±'을 객체 μƒμ‘΄μ˜ μ§€ν‘œλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€ [5]. μ „μ—­ 객체, 둜컬 λ³€μˆ˜(μŠ€νƒ), μ›Ή λΈŒλΌμš°μ €μ˜ DOM μš”μ†Œ λ“±κ³Ό 같은 루트(Root) κ°μ²΄μ΄κ±°λ‚˜, λ‹€λ₯Έ 생쑴 κ°μ²΄λ‘œλΆ€ν„° μ°Έμ‘°(Pointer) 체인을 톡해 도달할 수 μžˆλŠ” κ°μ²΄λŠ” '생쑴(live)' μƒνƒœλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€ [1, 6, 7]. 반면 λ£¨νŠΈμ—μ„œ 도달할 수 μ—†λŠ” λͺ¨λ“  κ°μ²΄λŠ” '죽은(dead)' 객체, 즉 κ°€λΉ„μ§€λ‘œ λΆ„λ₯˜λ˜μ–΄ λ©”λͺ¨λ¦¬κ°€ νšŒμˆ˜λ©λ‹ˆλ‹€ [1, 6, 8, 9]. - **μ„ΈλŒ€λ³„ κ°€μ„€κ³Ό νž™(Heap) λ©”λͺ¨λ¦¬ ꡬ쑰** λŒ€λΆ€λΆ„μ˜ κ°μ²΄λŠ” μƒμ„±λœ 직후 금방 μ£½λŠ”λ‹€λŠ” 'μ„ΈλŒ€λ³„ κ°€μ„€(Generational Hypothesis)'에 κΈ°λ°˜ν•˜μ—¬, V8κ³Ό 같은 μ΅œμ‹  엔진은 νž™ λ©”λͺ¨λ¦¬λ₯Ό μ—¬λŸ¬ μ„ΈλŒ€λ‘œ λΆ„ν• ν•©λ‹ˆλ‹€ [10-12]. κ°μ²΄λŠ” 처음 맀우 μž‘κ³  할당이 λΉ λ₯Έ 'μ Šμ€ μ„ΈλŒ€(Young Generation/New-space)'에 ν• λ‹Ήλ˜λ©°, μ΄κ³³μ—μ„œ μ—¬λŸ¬ 번의 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μ£ΌκΈ°λ₯Ό 살아남은 객체만이 크기가 큰 '였래된 μ„ΈλŒ€(Old Generation/Old-space)'둜 승격(Promotion)λ©λ‹ˆλ‹€ [10, 11, 13, 14]. - **λ§ˆμ΄λ„ˆ GC (Minor GC / Scavenge μ—°μ‚°)** μ Šμ€ μ„ΈλŒ€μ˜ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ Scavenge(λ˜λŠ” Copy forward) μ•Œκ³ λ¦¬μ¦˜μ΄ 자주 그리고 λΉ λ₯΄κ²Œ μ‹€ν–‰λ©λ‹ˆλ‹€ [15-18]. 이 μ•Œκ³ λ¦¬μ¦˜μ€ 곡간을 두 개의 λ™μΌν•œ λ°˜κ³΅κ°„(From-space와 To-space)으둜 λ‚˜λˆ„μ–΄, μƒμ‘΄ν•œ 객체λ₯Ό To-space둜 λ³΅μ‚¬ν•˜κ±°λ‚˜ 였래된 μ„ΈλŒ€λ‘œ μŠΉκ²©μ‹œν‚¨ ν›„, From-space 전체λ₯Ό λΉ„μ›Œλ²„λ¦½λ‹ˆλ‹€ [15, 19-22]. 이 κ³Όμ •μ—μ„œ 객체듀이 μ—°μ†λœ 곡간에 μ••μΆ•λ˜λ―€λ‘œ λ©”λͺ¨λ¦¬ νŒŒνŽΈν™”κ°€ λ°©μ§€λ©λ‹ˆλ‹€ [15, 20, 21]. - **메이저 GC (Major GC / Mark-Sweep-Compact)** 였래된 μ„ΈλŒ€λ₯Ό μˆ˜μ§‘ν•  λ•ŒλŠ” Mark-Sweep 및 Mark-Compact μ•Œκ³ λ¦¬μ¦˜μ΄ μ‚¬μš©λ©λ‹ˆλ‹€ [5, 23, 24]. * **λ§ˆν‚Ή(Marking):** GCκ°€ λ£¨νŠΈλΆ€ν„° 객체 κ·Έλž˜ν”„λ₯Ό 깊이 μš°μ„  탐색(DFS)으둜 μΆ”μ ν•˜μ—¬ 생쑴 객체λ₯Ό μ‹λ³„ν•©λ‹ˆλ‹€. μ΄λ•Œ κ°μ²΄λŠ” 발견 μƒνƒœμ— 따라 흰색(미발견), νšŒμƒ‰(λ°œκ²¬λ˜μ—ˆμœΌλ‚˜ 이웃 미처리), 검은색(μ™„μ „ 처리됨)으둜 ν‘œμ‹œλ©λ‹ˆλ‹€ [7, 25-27]. * **μŠ€μœ•(Sweeping):** λ§ˆν‚Ήλ˜μ§€ μ•Šμ€ 죽은 객체의 λ²”μœ„λ₯Ό μŠ€μΊ”ν•˜μ—¬ 빈 곡간(Free list)으둜 λ³€ν™˜ν•˜κ³  νšŒμˆ˜ν•©λ‹ˆλ‹€ [27-29]. * **μ••μΆ•(Compacting):** λ©”λͺ¨λ¦¬ νŒŒνŽΈν™”λ₯Ό 쀄이기 μœ„ν•΄ 살아남은 객체듀을 μ‘°κ°λ‚œ νŽ˜μ΄μ§€μ—μ„œ λ‹€λ₯Έ νŽ˜μ΄μ§€μ˜ 빈 κ³΅κ°„μœΌλ‘œ 이주(Migration)μ‹œμΌœ λͺ¨μ•„μ€λ‹ˆλ‹€ [2, 27, 30, 31]. - **μ„±λŠ₯ μ΅œμ ν™” 기법 (μ§€μ—° μ΅œμ†Œν™”)** κ³Όκ±° 전톡적인 GC 방식은 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행을 λ©ˆμΆ”λŠ” 'Stop-The-World' μΌμ‹œ μ •μ§€κ°€ κΈΈμ–΄μ§€λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€ [2, 32]. 이λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄ V8의 Orinoco κ°€λΉ„μ§€ 컬렉터 등은 메인 μŠ€λ ˆλ“œμ™€ 헬퍼 μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— μž‘μ—…μ„ λ‚˜λˆ„μ–΄ μˆ˜ν–‰ν•˜λŠ” **병렬(Parallel)** 처리, 메인 μŠ€λ ˆλ“œμ˜ JavaScript μ‹€ν–‰ 사이사이에 GC μž‘μ—…μ„ μž‘μ€ λ‹¨μœ„λ‘œ μͺΌκ°œμ„œ μˆ˜ν–‰ν•˜λŠ” **점진적(Incremental)** 처리, 그리고 메인 μŠ€λ ˆλ“œ 싀행을 λ°©ν•΄ν•˜μ§€ μ•Šκ³  λ°±κ·ΈλΌμš΄λ“œμ—μ„œ GCλ₯Ό λ™μ‹œμ— μˆ˜ν–‰ν•˜λŠ” **λ™μ‹œ(Concurrent)** 기법을 λ„μž…ν•˜μ—¬ μ§€μ—°(Latency)κ³Ό 버벅거림을 획기적으둜 μ€„μ˜€μŠ΅λ‹ˆλ‹€ [33-38]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** λ©”λͺ¨λ¦¬ λˆ„μˆ˜ (Memory Leak), νž™ λ©”λͺ¨λ¦¬ (Heap Memory), V8 μ—”μ§„ (V8 Engine), [[Stop-The-World]] - **Projects/Contexts:** V8 Orinoco ν”„λ‘œμ νŠΈ, Node.js, IBM Eclipse OpenJ9 - **Contradictions/Notes:** κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ€ ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œμ„œ μˆ˜λ™ λ©”λͺ¨λ¦¬ 관리에 λŒ€ν•œ 뢀담을 λœμ–΄μ£Όμ–΄ λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ‚˜ 였λ₯˜λ₯Ό 획기적으둜 μ€„μ—¬μ£ΌλŠ” μž₯점이 μžˆμ§€λ§Œ, λ©”λͺ¨λ¦¬ 관리 μ‹œμ μ— λŒ€ν•œ μ œμ–΄κΆŒμ„ μžƒκ²Œ 되며 C/C++ 같은 언어와 비ꡐ할 λ•Œ 포인터λ₯Ό μ‹λ³„ν•˜κ³  λ§ˆν‚Ήν•˜λŠ” λ“± λŸ°νƒ€μž„ μ˜€λ²„ν—€λ“œλ₯Ό λ°œμƒμ‹œν‚¨λ‹€λŠ” 단점도 κ³΅μ‘΄ν•©λ‹ˆλ‹€ [3, 4]. --- *Last updated: 2026-04-19* ---