--- id: P-REINFORCE-AUTO-A11817 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 Collector)" --- # [[κ°€λΉ„μ§€ 컬렉터(Garbage Collector)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > κ°€λΉ„μ§€ 컬렉터(Garbage Collector, GC)λŠ” ν”„λ‘œκ·Έλž¨μ—μ„œ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬(Dead regions)λ₯Ό μžλ™μœΌλ‘œ μ‹λ³„ν•˜μ—¬ μš΄μ˜μ²΄μ œλ‚˜ μƒˆλ‘œμš΄ 객체 할당을 μœ„ν•΄ μž¬μ‚¬μš©ν•˜λ„λ‘ μˆ˜κ±°ν•˜λŠ” λ©”λͺ¨λ¦¬ 관리 λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€ [1, 2]. μŠ€νƒ λ³€μˆ˜λ‚˜ μ „μ—­ 객체와 같은 '루트(Root) 객체'μ—μ„œλΆ€ν„° 포인터 체인을 톡해 도달할 수 μžˆλŠ” κ°μ²΄λŠ” 'ν™œμ„±(Live)' μƒνƒœλ‘œ κ°„μ£Όν•˜κ³ , 도달할 수 μ—†λŠ” λͺ¨λ“  κ°μ²΄λŠ” κ°€λΉ„μ§€λ‘œ νŒλ‹¨ν•©λ‹ˆλ‹€ [1, 3, 4]. κ°œλ°œμžκ°€ λ©”λͺ¨λ¦¬λ₯Ό λͺ…μ‹œμ μœΌλ‘œ 관리할 ν•„μš”μ„±μ„ λœμ–΄μ£ΌλŠ” μž₯점이 μžˆμ§€λ§Œ, λ©”λͺ¨λ¦¬ 관리에 λŒ€ν•œ μ œμ–΄κΆŒμ„ μžƒκ²Œ 되고 싀행을 λ©ˆμΆ”κ²Œ ν•˜λŠ” 예츑 λΆˆκ°€λŠ₯ν•œ μ§€μ—°(Pause)을 μœ λ°œν•  수 μžˆλŠ” μ–‘λ‚ μ˜ κ²€κ³Ό κ°™μŠ΅λ‹ˆλ‹€ [5, 6]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ κΈ°λ³Έ 원리와 객체 탐색** κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ 핡심 κ³Όμ œλŠ” λ©”λͺ¨λ¦¬μ˜ 죽은 μ˜μ—­μ„ μ‹λ³„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ [1]. GCλŠ” 루트 κ°μ²΄μ—μ„œ μ‹œμž‘ν•˜μ—¬ 객체 κ°„μ˜ μ°Έμ‘°(Pointer)λ₯Ό 좔적(Trace)ν•˜λŠ” 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€ [3, 7]. V8 μ—”μ§„μ˜ 경우, νž™ λ‚΄μ˜ 데이터와 포인터λ₯Ό λΉ λ₯΄κ²Œ μ‹λ³„ν•˜κΈ° μœ„ν•΄ 단어(Word)의 λ§ˆμ§€λ§‰ λΉ„νŠΈλ₯Ό ν”Œλž˜κ·Έλ‘œ ν™œμš©ν•˜λŠ” 'Tagged pointers(νƒœκ·Έλœ 포인터)' 기법을 μ‚¬μš©ν•©λ‹ˆλ‹€ [8, 9]. - **μ„ΈλŒ€μ  가섀에 κΈ°λ°˜ν•œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ (Generational Garbage Collection)** λŒ€λΆ€λΆ„μ˜ μ–Έμ–΄ ν™˜κ²½μ—μ„œλŠ” "λŒ€λΆ€λΆ„μ˜ κ°μ²΄λŠ” 생성 직후 λΉ λ₯΄κ²Œ μ£½λŠ”λ‹€"λŠ” μ„ΈλŒ€μ  κ°€μ„€(Generational Hypothesis)이 μ„±λ¦½ν•©λ‹ˆλ‹€ [10, 11]. 이λ₯Ό ν™œμš©ν•˜μ—¬ νž™ λ©”λͺ¨λ¦¬λ₯Ό 'Young Generation(μ‹ κ·œ μ„ΈλŒ€)'κ³Ό 'Old Generation(κ΅¬μ„ΈλŒ€)'으둜 λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•©λ‹ˆλ‹€ [12, 13]. - **Minor GC (Scavenger):** V8 μ—”μ§„μ˜ μ‹ κ·œ 곡간(New Space)μ—μ„œ 자주 λ°œμƒν•˜λ©° 맀우 λΉ λ₯΄κ²Œ μ‹€ν–‰λ©λ‹ˆλ‹€ [12, 14, 15]. μ‹ κ·œ 곡간을 두 개의 λ°˜κ³΅κ°„(To-Space, From-Space)으둜 λ‚˜λˆ„κ³ , μ‚΄μ•„μžˆλŠ” 객체만 μƒˆλ‘œμš΄ κ³΅κ°„μœΌλ‘œ λŒ€ν”Ό(Evacuation)μ‹œμΌœ νŒŒνŽΈν™”λ₯Ό μ œκ±°ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜(Cheney's algorithm λ“±)을 μ‚¬μš©ν•©λ‹ˆλ‹€ [14-16]. 이 과정을 두 번 이상 살아남은 κ°μ²΄λŠ” κ΅¬μ„ΈλŒ€ κ³΅κ°„μœΌλ‘œ 승격(Promote)λ©λ‹ˆλ‹€ [12, 17]. - **Major GC (Mark-Sweep-Compact):** κ΅¬μ„ΈλŒ€ 곡간에 μŒ“μΈ λŒ€κ·œλͺ¨ 데이터λ₯Ό μˆ˜μ§‘ν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€ [18]. 전체 νž™μ—μ„œ μ‚΄μ•„μžˆλŠ” 객체λ₯Ό 깊이 μš°μ„  탐색(DFS)으둜 νƒμƒ‰ν•˜μ—¬ ν‘œμ‹œ(Mark)ν•˜κ³ , 죽은 객체가 μ°¨μ§€ν•œ 곡간을 μ²­μ†Œ(Sweep)ν•˜μ—¬ 빈 λͺ©λ‘(Free list)으둜 λ°˜ν™˜ν•©λ‹ˆλ‹€ [18-21]. νŒŒνŽΈν™”κ°€ μ‹¬ν•œ νŽ˜μ΄μ§€μ˜ 경우 μ‚΄μ•„μžˆλŠ” 객체λ₯Ό λͺ¨μ•„ λ©”λͺ¨λ¦¬λ₯Ό μ••μΆ•(Compact)ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€ [21, 22]. - **μ„±λŠ₯ μ΅œμ ν™” 및 μ΅œμ‹  GC 기법** κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μž‘μ—…μ€ 기본적으둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 싀행을 μ™„μ „νžˆ λ©ˆμΆ”λŠ” "Stop-the-world" 지연을 μœ λ°œν•©λ‹ˆλ‹€ [2, 23]. 응닡성 μ €ν•˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ V8 μ—”μ§„(Orinoco GC)μ΄λ‚˜ IBM JVM 등은 λ‹€μŒκ³Ό 같은 λ°œμ „λœ 기법을 μ‚¬μš©ν•©λ‹ˆλ‹€. - **병렬 처리(Parallel):** 메인 μŠ€λ ˆλ“œμ™€ μ—¬λŸ¬ 헬퍼 μŠ€λ ˆλ“œκ°€ GC μž‘μ—…μ„ λΆ„λ‹΄ν•˜μ—¬ λ™μ‹œμ— μˆ˜ν–‰ν•˜μ—¬ 전체 μ§€μ—° μ‹œκ°„μ„ λ‹¨μΆ•ν•©λ‹ˆλ‹€ [24, 25]. - **점진적 처리(Incremental):** κΈ΄ GC μž‘μ—…μ„ μ—¬λŸ¬ 개의 짧은 단계(Step)둜 μͺΌκ°œμ–΄, 메인 μŠ€λ ˆλ“œμ—μ„œ JavaScript μ‹€ν–‰κ³Ό ꡐ차(Interleave)둜 μˆ˜ν–‰ν•©λ‹ˆλ‹€ [24, 26, 27]. - **λ™μ‹œ 처리(Concurrent):** 메인 μŠ€λ ˆλ“œκ°€ JavaScriptλ₯Ό 계속 μ‹€ν–‰ν•˜λŠ” λ™μ•ˆ, λ°±κ·ΈλΌμš΄λ“œμ˜ 헬퍼 μŠ€λ ˆλ“œκ°€ λ§ˆν‚Ή 및 μŠ€μœ„ν•‘ μž‘μ—…μ„ μ˜¨μ „νžˆ μˆ˜ν–‰ν•©λ‹ˆλ‹€ [24, 26, 28]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Generational Hypothesis]], [[Mark-Sweep-Compact]], [[Scavenge]], [[Stop-the-world]] - **Projects/Contexts:** [[V8 Engine]], [[Orinoco Garbage Collector]], [[IBM Eclipse OpenJ9]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ V8 엔진은 λ©”λͺ¨λ¦¬ νš¨μœ¨μ„ 높이기 μœ„ν•΄ 포인터 μ••μΆ•(Pointer compression) κΈ°μˆ μ„ λ„μž…ν–ˆλŠ”λ°, μ΄λŠ” λ©”λͺ¨λ¦¬μ™€ μ„±λŠ₯ μ΅œμ ν™”μ—λŠ” 크게 κΈ°μ—¬ν•˜μ§€λ§Œ 64λΉ„νŠΈ μ‹œμŠ€ν…œ ν™˜κ²½μ—μ„œλ„ V8의 μ΅œλŒ€ νž™ 크기λ₯Ό 4GB둜 μ œν•œν•˜κ²Œ λ§Œλ“œλŠ” λΆ€μž‘μš©(Downside)을 μ΄ˆλž˜ν•©λ‹ˆλ‹€ [29, 30]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/κ°€λΉ„μ§€ 컬렉터(Garbage Collector).md]] ---