--- id: [[P-Reinforce|P-Reinforce]]-AUTO-E8BF09 category: Unified confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - V8 [[JavaScript|JavaScript]] Engine" --- # [[V8 JavaScript Engine|V8 JavaScript Engine]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > V8 JavaScript Engine์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„ํ•˜๊ณ  ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๊ณ„์–ด๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณ ์„ฑ๋Šฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ [[WebAssembly|WebAssembly]] ์—”์ง„์ด๋‹ค [1]. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ ์Šคํƒ(Stack)๊ณผ ํž™(Heap)์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” '๋ ˆ์ง€๋˜ํŠธ ์„ธํŠธ(Resident Set)' ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค [2, 3]. ํŠนํžˆ ์„ธ๋Œ€๋ณ„ ๊ฐ€์„ค([[Generational Hypothesis|Generational Hypothesis]])์„ ์ ์šฉํ•œ ๊ณ ๊ธ‰ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ์‹œ์Šคํ…œ๊ณผ ์ตœ์‹  ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค [4-6]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) V8 JavaScript Engine์€ ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ณต์žกํ•œ ๋‚ด๋ถ€ ์•„ํ‚คํ…์ฒ˜์™€ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. ์†Œ์Šค์—์„œ ํ™•์ธ๋œ ํ•ต์‹ฌ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: * **๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ (Resident Set)**: V8์€ ๊ฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ๋‹น ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์Šคํƒ(Stack)๊ณผ ํž™(Heap)์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค [2, 7]. ์Šคํƒ์€ ํ•จ์ˆ˜ ํ”„๋ ˆ์ž„๊ณผ ์ •์  ๋ฐ์ดํ„ฐ๋ฅผ, ํž™์€ ๋Ÿฐํƒ€์ž„์— ํ• ๋‹น๋˜๋Š” ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค [8, 9]. ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ์ฒด์˜ ์ˆ˜๋ช…์— ๋”ฐ๋ผ '์ƒˆ๋กœ์šด ๊ณต๊ฐ„(New Space)'๊ณผ '์˜ค๋ž˜๋œ ๊ณต๊ฐ„([[Old Space|Old Space]])'์„ ๋น„๋กฏํ•ด ๋Œ€ํ˜• ๊ฐ์ฒด ๊ณต๊ฐ„(Large Object Space), ์ฝ”๋“œ ๊ณต๊ฐ„(Code Space) ๋“ฑ์œผ๋กœ ๋‚˜๋‰œ๋‹ค [10-12]. * **์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (Generational GC)**: ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ ์งํ›„ ์†Œ๋ฉธํ•œ๋‹ค๋Š” '์„ธ๋Œ€๋ณ„ ๊ฐ€์„ค'์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ˆ˜์ง‘ํ•œ๋‹ค [4, 13, 14]. * **[[Scavenge|Scavenge]]r (Minor GC)**: '์ƒˆ๋กœ์šด ๊ณต๊ฐ„'์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ๊ณต๊ฐ„์„ To-Space์™€ From-Space๋กœ ์ ˆ๋ฐ˜์”ฉ ๋‚˜๋ˆ„์–ด ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋งŒ์„ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ณต์‚ฌ(Evacuation)ํ•˜๋Š” Cheney ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ํŒŒํŽธํ™” ์—†์ด ๋น ๋ฅด๊ฒŒ ์ •๋ฆฌํ•œ๋‹ค [15-17]. * **[[Mark-Sweep|Mark-Sweep]]-Compact ([[Major GC|Major GC]])**: '์˜ค๋ž˜๋œ ๊ณต๊ฐ„'์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๋งˆํ‚น(Mark)ํ•˜๊ณ  ์ฃฝ์€ ๊ฐ์ฒด๋ฅผ ์“ธ์–ด๋ฒ„๋ ค(Sweep) ๋นˆ ๊ณต๊ฐ„(Free-list)์„ ํ™•๋ณดํ•œ ๋’ค, ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์••์ถ•(Compact)ํ•˜์—ฌ ํŒŒํŽธํ™”๋ฅผ ์ค„์ธ๋‹ค [18-21]. * **[[Orinoco|Orinoco]] ํ”„๋กœ์ ํŠธ**: ๊ธฐ์กด์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์œ ๋ฐœํ•˜๋Š” ๊ธด ๋ฉˆ์ถค ํ˜„์ƒ([[Stop-the-world|Stop-the-world]])์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ํ”„๋กœ์ ํŠธ์ด๋‹ค [5, 22]. ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๋ณด์กฐ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๋Š” ๋ณ‘๋ ฌ(Parallel), ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ค‘๊ฐ„์ค‘๊ฐ„์— ์ž‘์—…์„ ๋‚˜๋ˆ„์–ด ํ•˜๋Š” ์ ์ง„์ (Incremental), ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์™„์ „ํžˆ ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๋™์‹œ์„ฑ(Concurrent) ๊ธฐ๋ฒ•์„ ํ™œ์šฉํ•˜์—ฌ ์ง€์—ฐ(Latency)์„ ๋Œ€ํญ ๊ฐ์†Œ์‹œ์ผฐ๋‹ค [22-26]. * **๋ณด์•ˆ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ([[memory|memory]] Cage & [[Pointer Compression|Pointer Compression]])**: 64๋น„ํŠธ ์‹œ์Šคํ…œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํฌ์ธํ„ฐ๋ฅผ 32๋น„ํŠธ๋กœ ์ €์žฅํ•˜๋Š” 'ํฌ์ธํ„ฐ ์••์ถ•(Pointer Compression)'์„ ๋„์ž…ํ•˜์—ฌ V8 ํž™์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ 4GB๋กœ ์ œํ•œํ•œ๋‹ค [27, 28]. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ํž™ ๋‚ด๋ถ€์˜ ํฌ์ธํ„ฐ๋งŒ ํ—ˆ์šฉํ•˜๋Š” '๋ฉ”๋ชจ๋ฆฌ ์ผ€์ด์ง€(Memory Cage)' ์—ญํ• ์„ ํ•˜์—ฌ, ๊ณต๊ฒฉ์ž๊ฐ€ ํƒ€์ž… ํ˜ผ๋ž€(Type Confusion) ๋“ฑ์„ ์ด์šฉํ•ด ์™ธ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž„์˜๋กœ ์ฝ๊ณ  ์“ฐ๋Š” ์•…์˜์  ์ต์Šคํ”Œ๋กœ์ž‡(`addrof`, `fakeobj` ๋“ฑ)์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ๊ฒฝ๊ณ„๋ฅผ ์ œ๊ณตํ•œ๋‹ค [29-33]. * **๋””๋ฒ„๊น… ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ถ„์„**: V8์€ `--trace-gc` ์™€ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด GC ๊ณผ์ •๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ์ƒ์„ธํ•˜๊ฒŒ ๋กœ๊น…ํ•˜๋ฉฐ [34-36], [[Chrome DevTools|Chrome DevTools]]์˜ ํž™ ์Šค๋ƒ…์ƒท(Heap Snapshot)๊ณผ ํ• ๋‹น ํƒ€์ž„๋ผ์ธ(Allocation Timeline) ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์—์„œ ์ˆ˜๊ฑฐ๋˜์ง€ ๋ชปํ•œ ์ฑ„ ๋‚จ์•„์žˆ๋Š” ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๊ฒฝ๋กœ([[Retaining Path|Retaining Path]])๋ฅผ ์ถ”์ ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค [37-40]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], Resident Set, Orinoco Project, Memory Cage, [[Pointer Compression|Pointer Compression]] - **Projects/Contexts:** Node.js, [[Google Chrome|Google Chrome]], [[Electron|Electron]] - **Contradictions/Notes:** ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ํ†ตํ•ด V8 ์—”์ง„์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ํŽธ๋ฆฌํ•จ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(ECMAScript) ์‚ฌ์–‘ ์ž์ฒด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์ง์ ‘ ์ธก์ •ํ•˜๊ฑฐ๋‚˜ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต์‹์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•œ๋‹ค [41]. ๋˜ํ•œ ์ˆ˜๋ช…์ด ์งง์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃจ๋Š” Minor GC๋Š” ๊ฐ์ฒด๋ฅผ ์ƒˆ ๊ณต๊ฐ„์œผ๋กœ '๋ณต์‚ฌ(Copy)'ํ•˜์—ฌ ํ• ๋‹น ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ์‹์„ ์ทจํ•˜์ง€๋งŒ, ์ˆ˜๋ช…์ด ๊ธด ๊ฐ์ฒด๊ฐ€ ๋ชจ์ธ Major GC ์˜์—ญ์—์„œ๋Š” ๋ณต์‚ฌ ๋น„์šฉ์ด ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ ์ฃผ๋กœ 'Mark-Sweep'์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์—์„œ๋งŒ ์••์ถ•(Compact)์„ ์ง„ํ–‰ํ•˜๋Š” ์ „๋žต์  ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค [14, 20, 21]. --- *Last updated: 2026-04-19* ---