--- id: P-REINFORCE-AUTO-18F9C4 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 แ„‹แ…ฆแ†ซแ„Œแ…ตแ†ซ แ„’แ…ตแ†ธ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ แ„†แ…ตแ†พ แ„…แ…ฉแ„€แ…ณ แ„‡แ…ฎแ†ซแ„‰แ…ฅแ†จ|V8 ์—”์ง„ ํž™ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋กœ๊ทธ ๋ถ„์„]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > V8 ์—”์ง„ ํž™ ์•„ํ‚คํ…์ฒ˜๋Š” ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ๋น ๋ฅธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์„ ์œ„ํ•ด ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์„ธ๋Œ€์™€ ์šฉ๋„๋ณ„ ์—ฌ๋Ÿฌ ๊ณต๊ฐ„์œผ๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ์‹œ์Šคํ…œ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ์งง์€ ์‹œ๊ฐ„ ์•ˆ์— ์†Œ๋ฉธํ•œ๋‹ค๋Š” '์„ธ๋Œ€ ๊ฐ€์„ค(Generational hypothesis)'์„ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๊ณ„๋˜์–ด ์ Š์€ ์„ธ๋Œ€์™€ ์˜ค๋ž˜๋œ ์„ธ๋Œ€์— ๊ฐ๊ฐ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ๋กœ๊ทธ ๋ถ„์„์€ `--trace-gc` ๋“ฑ์˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹คํŒจ ์›์ธ, ์ˆ˜์ง‘์— ์†Œ์š”๋œ ์‹œ๊ฐ„, ํž™์˜ ์ƒ์กด ๊ฐ์ฒด ํฌ๊ธฐ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•จ์œผ๋กœ์จ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ์ง„๋‹จํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **V8 ํž™ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ (Heap Organization)** * **Resident Set ๋ถ„ํ• :** V8 ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ฃผ๋กœ ์ •์  ๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ํ”„๋ ˆ์ž„์„ ๋‹ด๋Š” ์Šคํƒ(Stack) ๊ณต๊ฐ„๊ณผ, ๋™์  ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋ฉฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ํž™(Heap) ๊ณต๊ฐ„์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค [1-3]. * **New Space (Young Generation):** ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์ด ํ• ๋‹น๋˜๋Š” ์ž‘๊ณ  ๋น ๋ฅธ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์ด ๊ณต๊ฐ„์€ ํฌ๊ธฐ๊ฐ€ 1~64MB ์ •๋„๋กœ ์ž‘์œผ๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ 'From-Space'์™€ 'To-Space'๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ๋ฐ˜๊ณต๊ฐ„(semi-space)์œผ๋กœ ๋‚˜๋‰˜์–ด Scavenger ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [4-7]. * **Old Space (Old Generation):** New Space์—์„œ ๋‘ ๋ฒˆ์˜ GC๋ฅผ ๊ฑฐ์น˜๊ณ ๋„ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์Šน๊ฒฉ(Promotion)๋˜์–ด ์ด๋™ํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์ด ๊ณต๊ฐ„์€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง„ 'Old Pointer Space'์™€ ๋ฌธ์ž์—ด ๋“ฑ ์ˆœ์ˆ˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ง„ 'Old Data Space'๋กœ ์„ธ๋ถ„ํ™”๋˜์–ด ๋งˆํฌ-์Šค์œ•-์ปดํŒฉํŠธ(Mark-Sweep-Compact) ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [4, 7-9]. * **ํŠน์ˆ˜ ๊ณต๊ฐ„:** ์—ฌํƒ€ ๊ณต๊ฐ„์˜ ํ•œ๊ณ„๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ํฐ ๊ฐ์ฒด๋ฅผ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ mmapํ•˜๋Š” 'Large Object Space', JIT ์ปดํŒŒ์ผ๋œ ๋จธ์‹  ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•˜๋Š” 'Code Space', ๊ทธ๋ฆฌ๊ณ  ํฌ๊ธฐ๊ฐ€ ์ผ์ •ํ•œ ๋‚ด๋ถ€ ๊ตฌ์กฐ์ฒด(Map, Cell)๋ฅผ ๋‹ด๋Š” ์ „์šฉ ๊ณต๊ฐ„๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [4, 7, 8]. * **ํŽ˜์ด์ง€์™€ ์ƒŒ๋“œ๋ฐ•์‹ฑ:** ๊ฐ ๊ณต๊ฐ„์€ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ์ธ ํŽ˜์ด์ง€(Page)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ 1MB ๋‹จ์œ„์˜€์œผ๋‚˜ ์ €๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๊ธฐ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด 512KB๋กœ ์ถ•์†Œ๋˜๊ธฐ๋„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค [10-13]. ์ตœ์‹  64๋น„ํŠธ V8์€ ํฌ์ธํ„ฐ ์••์ถ•(Pointer Compression) ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ํž™ ์ „์ฒด๋ฅผ 4GB๋กœ ์ œํ•œ๋œ ์—ฐ์†๋œ '์ผ€์ด์ง€(Cage)' ์˜์—ญ ์•ˆ์— ๊ฐ€๋‘์–ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [14-16]. **๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ๋ฉ”์ปค๋‹ˆ์ฆ˜** * **๋งˆ์ด๋„ˆ GC (Scavenge):** New Space์˜ ํ• ๋‹น ํฌ์ธํ„ฐ๊ฐ€ ํ•œ๊ณ„์— ๋‹ฌํ•˜๋ฉด(Allocation failure) ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. Cheney ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ํ™œ์„ฑ ๊ฐ์ฒด๋งŒ 'To-Space' ๋˜๋Š” Old Space๋กœ ๋ณต์‚ฌํ•˜๊ณ , ์ด์ „ ๊ณต๊ฐ„์„ ํ†ต์งธ๋กœ ๋น„์›€์œผ๋กœ์จ ํŒŒํŽธํ™”๋ฅผ ์—†์•ฑ๋‹ˆ๋‹ค [5, 17-19]. * **๋ฉ”์ด์ € GC:** Old Space์˜ ๊ฐ์ฒด๋ฅผ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค. ํž™ ์ „์ฒด์—์„œ ํ™œ์„ฑ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„(Mark)ํ•˜๊ณ , ์ ‘๊ทผ ๋ถˆ๊ฐ€ ๊ฐ์ฒด๋ฅผ ํ•ด์ œ(Sweep)ํ•˜๋ฉฐ, ๋‚จ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ํŒŒํŽธํ™”๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ™œ์„ฑ ๊ฐ์ฒด๋“ค์„ ํ•œ ๊ณณ์œผ๋กœ ๋ชจ์๋‹ˆ๋‹ค(Compact) [20-23]. * **์˜ค๋ฆฌ๋…ธ์ฝ”(Orinoco) ํ”„๋กœ์ ํŠธ:** ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ •์ง€๋˜๋Š” 'Stop-the-world' ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ‘๋ ฌ(Parallel), ์ ์ง„์ (Incremental), ๋™์‹œ(Concurrent) ์Šค๋ ˆ๋“œ ๊ธฐ๋ฒ•์„ ๊ฒฐํ•ฉํ•˜์—ฌ GC ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ถ„์‚ฐ์‹œํ‚ต๋‹ˆ๋‹ค [24-27]. **๋กœ๊ทธ ๋ถ„์„ (Log Analysis)** * **--trace-gc ๋กœ๊น… ๋ถ„์„:** `PID, Isolate, Timestamp ms: Type Used (Total) -> Used (Total) MB, Duration ms, Reason` ํ˜•์‹์œผ๋กœ ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Reason ํ•ญ๋ชฉ์ด 'allocation failure'์ธ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋‹ด์„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜์—ฌ GC๊ฐ€ ๊ฐ•์ œ ์‹คํ–‰๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•˜๋ฉฐ, ์†Œ์š” ์‹œ๊ฐ„(Duration) ์ง€ํ‘œ๋ฅผ ํ†ตํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ฉˆ์ถค ๊ธธ์ด๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [28-31]. * **์„ธ๋ถ€ ๋กœ๊ทธ (--trace-gc-verbose / --trace-gc-nvp):** ๊ฐ ํž™ ๊ณต๊ฐ„(New, Old, Large Object ๋“ฑ)์˜ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์‹œ์Šคํ…œ์— ์ปค๋ฐ‹๋œ ์–‘์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒ์„ธํžˆ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฉ”์ด์ € GC ์ดํ›„์—๋„ Old space์˜ Used ์˜์—ญ์ด ์ ์ง„์ ์œผ๋กœ ๊ณ„์† ์ฆ๊ฐ€ํ•œ๋‹ค๋ฉด ์ „ํ˜•์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ฆ์ƒ์œผ๋กœ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค [30, 32]. * **ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ ์—ฐ๊ณ„:** `--heap-prof` ํ”Œ๋ž˜๊ทธ๋‚˜ ํฌ๋กฌ DevTools์˜ Allocation Timeline์„ ํ™œ์šฉํ•ด ์ฃผ๊ธฐ์ ์ธ ํž™ ์Šค๋ƒ…์ƒท์„ ์ฐ๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ• ๋‹น ํ›„ ์ˆ˜์ง‘๋˜์ง€ ์•Š์•„ ํŒŒ๋ž€์ƒ‰์œผ๋กœ ๋‚จ์€ ํƒ€์ž„๋ผ์ธ ๋ง‰๋Œ€๋‚˜, DevTools์˜ 'Retainers' ํŒจ๋„์„ ์—ญ์ถ”์ ํ•จ์œผ๋กœ์จ ์–ด๋–ค ๋ฃจํŠธ ๊ฐ์ฒด๊ฐ€ ํ•ด์ œ๋˜์–ด์•ผ ํ•  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฅ๊ณ  ์žˆ๋Š”์ง€(Retaining Paths) ์ •ํ™•ํžˆ ํŒŒ์•… ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค [33-36]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[แ„‰แ…ฆแ„ƒแ…ข แ„€แ…กแ„‰แ…ฅแ†ฏ(Generational Hypothesis)|์„ธ๋Œ€ ๊ฐ€์„ค(Generational Hypothesis)]], [[Scavenger(แ„†แ…กแ„‹แ…ตแ„‚แ…ฅ GC)|Scavenger(๋งˆ์ด๋„ˆ GC)]], [[Mark-Sweep-Compact(แ„†แ…ฆแ„‹แ…ตแ„Œแ…ฅ GC)|Mark-Sweep-Compact(๋ฉ”์ด์ € GC)]], [[แ„‹แ…ฉแ„…แ…ตแ„‚แ…ฉแ„แ…ฉ(Orinoco) แ„‘แ…ณแ„…แ…ฉแ„Œแ…ฆแ†จแ„แ…ณ|์˜ค๋ฆฌ๋…ธ์ฝ”(Orinoco) ํ”„๋กœ์ ํŠธ]], [[แ„‘แ…ฉแ„‹แ…ตแ†ซแ„แ…ฅ แ„‹แ…กแ†ธแ„Žแ…ฎแ†จ(Pointer Compression)|ํฌ์ธํ„ฐ ์••์ถ•(Pointer Compression)]] - **Projects/Contexts:** [[Node.js แ„‘แ…ณแ„…แ…ฉแ„ƒแ…ฅแ†จแ„‰แ…งแ†ซ แ„†แ…ฆแ„†แ…ฉแ„…แ…ต แ„‚แ…ฎแ„‰แ…ฎ แ„Œแ…ตแ†ซแ„ƒแ…กแ†ซ|Node.js ํ”„๋กœ๋•์…˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ง„๋‹จ]], [[Chrome แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ฅ แ„‘แ…ณแ„…แ…ฉแ„‰แ…ฆแ„‰แ…ณ V8 แ„‰แ…ขแ†ซแ„ƒแ…ณแ„‡แ…กแ†จแ„‰แ…ณ แ„‡แ…ฉแ„‹แ…กแ†ซ|Chrome ๋ Œ๋”๋Ÿฌ ํ”„๋กœ์„ธ์Šค V8 ์ƒŒ๋“œ๋ฐ•์Šค ๋ณด์•ˆ]] - **Contradictions/Notes:** ์†Œ์Šค [37-56]์—์„œ๋Š” gencon, balanced ๋“ฑ IBM Eclipse OpenJ9์˜ GC ์ •์ฑ…์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๊นŠ์ด ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋‚˜, ์ด๋Š” V8 ์—”์ง„ ๊ณ ์œ ์˜ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ณธ V8 ์•„ํ‚คํ…์ฒ˜ ์ค‘์‹ฌ ๋ถ„์„์—์„œ๋Š” ๋ฐฐ์ œํ•˜์˜€์Šต๋‹ˆ๋‹ค. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/V8 ์—”์ง„ ํž™ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋กœ๊ทธ ๋ถ„์„.md ---