--- id: P-REINFORCE-AUTO-D3B770 category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Major GC" --- # [[Major GC|Major GC]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Major GCλŠ” V8을 λΉ„λ‘―ν•œ μ—¬λŸ¬ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ ν™˜κ²½μ—μ„œ λ©”λͺ¨λ¦¬μ˜ 'Old Space(였래된 μ„ΈλŒ€)' λ˜λŠ” νž™(Heap) μ „μ²΄μ˜ κ°€λΉ„μ§€λ₯Ό μˆ˜μ§‘ν•˜λŠ” μ£ΌκΈ°μž…λ‹ˆλ‹€ [1-3]. 짧은 수λͺ…μ˜ 객체λ₯Ό μ²˜λ¦¬ν•˜λŠ” Minor GC(Scavenge)와 달리, Mark-Sweep 및 Mark-Compact μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ 수λͺ…이 κΈΈμ–΄ Old Space둜 승격된 κ°μ²΄λ“€μ˜ λ©”λͺ¨λ¦¬λ₯Ό μ •λ¦¬ν•©λ‹ˆλ‹€ [1, 4, 5]. μ „ν†΅μ μœΌλ‘œλŠ” κΈ΄ μ •μ§€ μ‹œκ°„(stop-the-world)을 λ°œμƒμ‹œμΌ°μœΌλ‚˜, μ΅œκ·Όμ—λŠ” 점진적(incremental), 병렬(parallel), λ™μ‹œμ (concurrent) 처리 기법을 λ„μž…ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 메인 μŠ€λ ˆλ“œ 지연을 μ΅œμ†Œν™”ν•˜λŠ” λ°©ν–₯으둜 μ΅œμ ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [6-8]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **μž‘λ™ 단계 및 μ•Œκ³ λ¦¬μ¦˜:** Major GCλŠ” 수백 λ©”κ°€λ°”μ΄νŠΈμ˜ 데이터λ₯Ό 포함할 수 μžˆλŠ” Old Spaceλ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ 주둜 μ„Έ κ°€μ§€ λ‹¨κ³„λ‘œ λ‚˜λ‰˜μ–΄ λ™μž‘ν•©λ‹ˆλ‹€ [5, 9, 10]. * **Marking (λ§ˆν‚Ή):** ν™œμ„±(live) 객체λ₯Ό μ°Ύμ•„λ‚΄λŠ” κ³Όμ •μž…λ‹ˆλ‹€. μŠ€νƒκ³Ό μ „μ—­ 객체 λ“±μ˜ 루트(Root) μ§‘ν•©μ—μ„œ μ‹œμž‘ν•΄ 포인터λ₯Ό 따라가며 객체λ₯Ό μΆ”μ ν•©λ‹ˆλ‹€ [2, 11]. κ°μ²΄λŠ” λ§ˆν‚Ή μƒνƒœμ— 따라 아직 λ°œκ²¬λ˜μ§€ μ•Šμ€ '흰색', λ°œκ²¬λ˜μ—ˆμœΌλ‚˜ 이웃이 μ²˜λ¦¬λ˜μ§€ μ•Šμ€ 'νšŒμƒ‰', λͺ¨λ“  이웃이 처리된 '검은색'으둜 κ΅¬λΆ„λ˜μ–΄ 깊이 μš°μ„  탐색(DFS) λ°©μ‹μœΌλ‘œ λ§ˆν‚Ήλ©λ‹ˆλ‹€ [11-13]. * **Sweeping (μŠ€μœ„ν•‘):** λ§ˆν‚Ή μ™„λ£Œ ν›„, GCκ°€ 도달할 수 μ—†λŠ” 객체(죽은 객체)듀이 μ°¨μ§€ν–ˆλ˜ μ—°μ†λœ λ©”λͺ¨λ¦¬ 곡간을 μ°Ύμ•„λ‚΄ μ—¬μœ  λͺ©λ‘(free-list)에 μΆ”κ°€ν•¨μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬λ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ λ§Œλ“­λ‹ˆλ‹€ [5, 14-16]. * **Compacting (μ••μΆ•):** μ‹€μ œ λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄이기 μœ„ν•΄ νŒŒνŽΈν™”κ°€ μ‹¬ν•œ νŽ˜μ΄μ§€μ—μ„œ ν™œμ„± 객체듀을 λ‹€λ₯Έ νŽ˜μ΄μ§€μ˜ 빈 κ³΅κ°„μœΌλ‘œ 이주(볡사)μ‹œν‚΅λ‹ˆλ‹€ [5, 15, 17, 18]. 객체의 볡사 λΉ„μš©μ΄ λΉ„μ‹ΈκΈ° λ•Œλ¬Έμ— λͺ¨λ“  νŽ˜μ΄μ§€κ°€ μ•„λ‹Œ νŒŒνŽΈν™”κ°€ μ‹¬ν•œ 일뢀 νŽ˜μ΄μ§€μ— λŒ€ν•΄μ„œλ§Œ μ„ νƒμ μœΌλ‘œ 압좕을 μˆ˜ν–‰ν•©λ‹ˆλ‹€ [15, 18]. * **트리거 쑰건:** New Spaceμ—μ„œ μƒμ„±λœ ν›„ Minor GC 사이클을 두 번 이상 살아남아 Old Space둜 승격(Promote)된 객체듀이 μΌμ •λŸ‰μ— λ„λ‹¬ν•˜κ±°λ‚˜, νž™μ΄ λ™μ μœΌλ‘œ κ³„μ‚°λœ μ œν•œμΉ˜μ— κ·Όμ ‘ν•  λ•Œ μ‹€ν–‰λ©λ‹ˆλ‹€ [1, 4, 8]. * **μ„±λŠ₯ μ΅œμ ν™” 기법 (Orinoco):** κ³Όκ±°μ—λŠ” Major GCκ°€ 500-1000ms에 이λ₯΄λŠ” κΈ΄ μ •μ§€ μ‹œκ°„μ„ μœ λ°œν–ˆμœΌλ‚˜ [6], V8의 Orinoco ν”„λ‘œμ νŠΈλ₯Ό 톡해 λ‹€μŒκ³Ό 같은 비동기 및 병렬 기법이 λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [7, 19, 20]. * **Incremental Marking (증뢄 λ§ˆν‚Ή) 및 Lazy Sweeping (μ§€μ—° μŠ€μœ„ν•‘):** λ§ˆν‚Ή μž‘μ—…μ„ 5~10ms의 μž‘μ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μ μ§„μ μœΌλ‘œ μˆ˜ν–‰ν•˜λ©°, μŠ€μœ„ν•‘μ€ ν•„μš”ν•œ μ‹œμ κΉŒμ§€ μ§€μ—°μ‹œμΌœ ν•œ λ²ˆμ— κΈ΄ μ‹œκ°„ λ™μ•ˆ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μ§€λ˜λŠ” 것을 λ°©μ§€ν•©λ‹ˆλ‹€ [6, 18, 21-23]. 이 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” 객체 κ·Έλž˜ν”„μ˜ λ³€ν™”λŠ” 'μ“°κΈ° μž₯λ²½(Write barrier)'을 톡해 κ΄€λ¦¬λ©λ‹ˆλ‹€ [24]. * **Concurrent Marking (λ™μ‹œ λ§ˆν‚Ή):** μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 메인 μŠ€λ ˆλ“œμ—μ„œ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ λ°±κ·ΈλΌμš΄λ“œ 헬퍼 μŠ€λ ˆλ“œμ—μ„œ λ§ˆν‚Ή μž‘μ—…μ„ μ „μ μœΌλ‘œ λ™μ‹œμ— μˆ˜ν–‰ν•©λ‹ˆλ‹€ [8, 22]. * **Parallel Compaction (병렬 μ••μΆ•):** 메인 μŠ€λ ˆλ“œμ™€ μ—¬λŸ¬ 헬퍼 μŠ€λ ˆλ“œκ°€ ν•¨κ»˜ μ••μΆ• 및 포인터 μ—…λ°μ΄νŠΈ μž‘μ—…μ„ λ‚˜λˆ„μ–΄ λ³‘λ ¬λ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€ [25, 26]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[ᄆᅑ아ᄂα…₯ α„€α…‘α„‡α…΅α„Œα…΅ ᄏα…₯ᆯ렉션(Minor GC)|Minor GC]], [[Mark-Sweep|Mark-Sweep]], [[ᄆᅑ크-ᄏα…₯ᆷᄑᅒᆨ트(Mark-Compact)|Mark-Compact]], [[Orinoco|Orinoco]], [[Old Space|Old Space]] - **Projects/Contexts:** [[V8 JavaScript Engine|V8 JavaScript Engine]], [[Node.js Memory Management|Node.js Memory Management]] - **Contradictions/Notes:** - Minor GC(Scavenge)λŠ” μƒˆλ‘­κ²Œ ν• λ‹Ήλœ μž‘κ³  수λͺ…이 짧은 객체λ₯Ό μ‹ μ†ν•˜κ²Œ μ²˜λ¦¬ν•˜λŠ” 반면, Major GCλŠ” 크기가 크고 수λͺ…이 κΈ΄ Old Space μ˜μ—­μ„ μ²˜λ¦¬ν•˜λ―€λ‘œ μƒλŒ€μ μœΌλ‘œ λΉ„μš©μ΄ 더 많이 λ“€λ©° 덜 λΉˆλ²ˆν•˜κ²Œ λ°œμƒν•©λ‹ˆλ‹€ [1, 3, 4, 10]. - 과거의 μ£Όμš” κ°€λΉ„μ§€ 컬렉터듀은 전체 과정을 λ™κΈ°μ μœΌλ‘œ μˆ˜ν–‰ν•˜μ—¬ 'Stop-the-world' μƒνƒœλ₯Ό μ΄ˆλž˜ν–ˆμ§€λ§Œ, ν˜„μž¬μ˜ 메이저 GCλŠ” 점진적이고 λ™μ‹œμ μΈ 기법을 톡해 메인 μŠ€λ ˆλ“œμ˜ 멈좀 μ‹œκ°„μ„ 사싀상 μ‚¬μš©μžκ°€ μΈμ§€ν•˜μ§€ λͺ»ν•  μˆ˜μ€€μœΌλ‘œ κ°œμ„ ν–ˆμŠ΅λ‹ˆλ‹€ [6-8, 22]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Major GC.md ---