--- id: P-REINFORCE-AUTO-F107AC category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - V8 μ—”μ§„(V8 Engine)" --- # [[V8 μ—”μ§„(V8 Engine)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λ©”λͺ¨λ¦¬ ꡬ쑰 (Memory Structure)**: V8의 ν”„λ‘œμ„ΈμŠ€ λ©”λͺ¨λ¦¬(Resident Set)λŠ” 주둜 정적 데이터(λ©”μ„œλ“œ ν”„λ ˆμž„, μ›μ‹œ κ°’, 객체 포인터)λ₯Ό μ €μž₯ν•˜λŠ” μŠ€νƒ(Stack)κ³Ό 동적 데이터λ₯Ό μ €μž₯ν•˜λŠ” νž™(Heap)으둜 λ‚˜λ‰©λ‹ˆλ‹€ [2, 5, 6]. νž™ λ©”λͺ¨λ¦¬λŠ” 객체의 생쑴 κΈ°κ°„κ³Ό 데이터 νŠΉμ„±μ— 따라 'μƒˆλ‘œμš΄ 곡간(New Space)', '였래된 곡간(Old Pointer/Data Space)', 'λŒ€ν˜• 객체 곡간(Large Object Space)', 'μ½”λ“œ 곡간(Code Space)' λ“± λ‹€μ–‘ν•œ μ„ΈλΆ€ μ˜μ—­(Space)으둜 λ‚˜λ‰˜μ–΄ λ…λ¦½μ μœΌλ‘œ κ΄€λ¦¬λ©λ‹ˆλ‹€ [7-9]. - **μ˜€λ¦¬λ…Έμ½”(Orinoco) κ°€λΉ„μ§€ μ»¬λ ‰μ…˜**: V8은 'μ˜€λ¦¬λ…Έμ½”(Orinoco)'λΌλŠ” ν”„λ‘œμ νŠΈλ₯Ό 톡해 병렬(Parallel), 증뢄(Incremental), λ™μ‹œμ„±(Concurrent) 기법을 GC에 λ„μž…ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 메인 μŠ€λ ˆλ“œ 쀑단 μ‹œκ°„(Stop-the-world)을 λŒ€ν­ μ€„μ˜€μŠ΅λ‹ˆλ‹€ [10-13]. - *Minor GC (Scavenger)*: 'μƒˆλ‘œμš΄ 곡간'μ—μ„œ 단λͺ…ν•˜λŠ” 객체듀을 λΉ λ₯΄κ²Œ μˆ˜μ§‘ν•©λ‹ˆλ‹€ [14, 15]. 두 개의 λ°˜κ³΅κ°„(To-Space, From-Space)을 λΆ„λ¦¬ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 방식을 톡해, 살아남은 κ°μ²΄λ§Œμ„ μƒˆ κ³΅κ°„μœΌλ‘œ 볡사 및 μ••μΆ•ν•˜κ³  2번의 사이클을 버틴 κ°μ²΄λŠ” '였래된 곡간'으둜 승격(Promote)μ‹œν‚΅λ‹ˆλ‹€ [15-17]. - *Major GC (Mark-Sweep-Compact)*: '였래된 곡간'을 κ΄€λ¦¬ν•˜λ©°, λ£¨νŠΈμ—μ„œ 도달 κ°€λŠ₯ν•œ 객체λ₯Ό νƒμƒ‰ν•˜μ—¬ μƒ‰μΉ ν•˜λŠ” λ§ˆν‚Ή(Marking), 죽은 객체의 λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜μ—¬ 빈 곡간(Free-list)에 μΆ”κ°€ν•˜λŠ” μŠ€μœ„ν•‘(Sweeping), νŒŒνŽΈν™”λ₯Ό 쀄이기 μœ„ν•΄ μ‚΄μ•„μžˆλŠ” 객체λ₯Ό λͺ¨μœΌλŠ” μ••μΆ•(Compacting) 단계λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€ [18-23]. - **포인터 식별 및 μ••μΆ• (Tagged Pointers & Pointer Compression)**: V8은 ν•˜μœ„ λΉ„νŠΈλ₯Ό μ΄μš©ν•΄ λ©”λͺ¨λ¦¬ λ‚΄μ—μ„œ 데이터(예: Smi라 λΆˆλ¦¬λŠ” μž‘μ€ μ •μˆ˜)와 포인터λ₯Ό λΉ λ₯΄κ²Œ κ΅¬λΆ„ν•˜λŠ” 'νƒœκ·Έλœ 포인터' 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€ [24-26]. λ˜ν•œ, 64λΉ„νŠΈ ν”Œλž«νΌμ—μ„œ λ©”λͺ¨λ¦¬λ₯Ό μ ˆμ•½ν•˜κΈ° μœ„ν•΄ 포인터λ₯Ό 32λΉ„νŠΈ μ˜€ν”„μ…‹μœΌλ‘œ μ••μΆ• μ €μž₯ν•˜λ©°, 이 μ •μ±…μœΌλ‘œ 인해 V8 νž™μ€ μ΅œλŒ€ 4GB의 μ œν•œλœ "λ©”λͺ¨λ¦¬ 케이지(Memory Cage)" μ˜μ—­ 내에 μœ„μΉ˜ν•˜κ²Œ λ©λ‹ˆλ‹€ [27-30]. - **μ„±λŠ₯ ν”„λ‘œνŒŒμΌλ§ 및 λˆ„μˆ˜ 탐지**: κ°œλ°œμžλŠ” `--trace-gc` ν”Œλž˜κ·Έ, νž™ μŠ€λƒ…μƒ·(Heap Snapshots), 크둬 개발자 λ„κ΅¬μ˜ ν• λ‹Ή νƒ€μž„λΌμΈ(Allocation Timeline) 등을 ν™œμš©ν•΄ μ—”μ§„ λ‚΄λΆ€μ˜ λ©”λͺ¨λ¦¬ 증감 좔이λ₯Ό ν™•μΈν•˜κ³ , λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 및 퍼포먼슀 μ €ν•˜μ˜ κ·Όλ³Έ 원인을 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€ [31-34]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection (GC)]], [[Orinoco]], [[Generational Hypothesis]], [[Pointer Compression]], [[Heap Space]] - **Projects/Contexts:** [[Google Chrome]], [[Node.js]], [[Electron]], [[Deno]] - **Contradictions/Notes:** 과거의 V8 μŠ€μΊλΉˆμ €(Scavenger)λŠ” 단일 μŠ€λ ˆλ“œ 기반의 Cheney μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν–ˆμœΌλ‚˜, μ΅œμ‹  λ²„μ „μ—μ„œλŠ” λ©€ν‹°μ½”μ–΄ ν™˜κ²½μ— 맞좰 Halstead 방식과 μœ μ‚¬ν•œ 동적 μž‘μ—… ν›”μΉ˜κΈ°(Work stealing) 기반의 병렬 μŠ€μΊλΉˆμ €λ₯Ό λ„μž…ν•˜μ—¬ μ„±λŠ₯을 κ°œμ„ ν•œ λ³€ν™”κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€ [35, 36]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/V8 μ—”μ§„(V8 Engine).md]] ---