--- id: P-REINFORCE-AUTO-7D181E 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 Engine" --- # [[V8 Engine]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > V8 Engine์€ ๊ตฌ๊ธ€์ด C++๋กœ ๊ฐœ๋ฐœํ•œ ๊ณ ์„ฑ๋Šฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ ์›น์–ด์…ˆ๋ธ”๋ฆฌ ์—”์ง„์ด๋‹ค [1]. ์ด ์—”์ง„์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ ํ›„ ๊ณง๋ฐ”๋กœ ์†Œ๋ฉธํ•œ๋‹ค๋Š” '์„ธ๋Œ€ ๊ฐ€์„ค(Generational Hypothesis)'์— ๊ธฐ๋ฐ˜ํ•œ ์ •๊ตํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC) ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค [2, 3]. ์ตœ์‹  GC ์•„ํ‚คํ…์ฒ˜์ธ ์˜ค๋ฆฌ๋…ธ์ฝ”(Orinoco)์™€ V8 ๋ฉ”๋ชจ๋ฆฌ ์ผ€์ด์ง€(Memory Cage) ๊ฐ™์€ ์ตœ์ ํ™” ๋ฐ ๋ณด์•ˆ ๊ธฐ๋ฒ•์„ ์ ๊ทน์ ์œผ๋กœ ๋„์ž…ํ•˜์—ฌ, ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ์„ฑ๋Šฅ, ์•ˆ์ „์„ฑ์„ ๋™์‹œ์— ๋ณด์žฅํ•œ๋‹ค [4, 5]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ (Heap & Stack)** * V8 ํ”„๋กœ์„ธ์Šค๋Š” 'Resident Set'์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹น๋ฐ›์œผ๋ฉฐ, ์ด๋Š” ํฌ๊ฒŒ ์ •์  ๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ํ”„๋ ˆ์ž„ ํฌ์ธํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ(Stack)๊ณผ ๋™์  ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ํž™(Heap)์œผ๋กœ ๋‚˜๋‰œ๋‹ค [6-8]. * ํž™ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ณต๊ฐ„(Space)์œผ๋กœ ๋ถ„ํ•  ๊ด€๋ฆฌ๋œ๋‹ค [2, 9]. ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” 'New Space', ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์Šน๊ฒฉ๋˜์–ด ์ €์žฅ๋˜๋Š” 'Old Space(Pointer/Data)', ํฌ๊ธฐ๊ฐ€ ํฐ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ 'Large Object Space', JIT ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” 'Code Space' ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค [9, 10]. * ๊ฐ ํž™ ๊ณต๊ฐ„์€ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์—ฐ์†์ ์œผ๋กœ ํ• ๋‹น๋ฐ›์€ 'ํŽ˜์ด์ง€(Page)'๋ผ๋Š” ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์ „ํ†ต์ ์ธ ํŽ˜์ด์ง€ ํฌ๊ธฐ๋Š” 1MB์˜€์œผ๋‚˜ ์ €์‚ฌ์–‘ ๊ธฐ๊ธฐ์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด 512KB๋กœ ์ตœ์ ํ™”๋˜๊ธฐ๋„ ํ–ˆ๋‹ค [3, 11, 12]. **๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ (Garbage Collection)** * **Minor GC (Scavenger):** ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ํ• ๋‹น์ด ๋นˆ๋ฒˆํ•œ New Space๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณ ์† ์ˆ˜์ง‘ ๋ฐฉ์‹์ด๋‹ค [3, 13]. ์ด ๊ณต๊ฐ„์€ 'From-Space'์™€ 'To-Space' ๋‘ ๊ฐœ์˜ ๋ฐ˜๊ณต๊ฐ„(Semi-space)์œผ๋กœ ๋‚˜๋‰˜๋ฉฐ, ์ฒด๋‹ˆ(Cheney) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•ด ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋งŒ์„ To-Space๋กœ ๋ณต์‚ฌํ•˜๊ณ  ์‹๋ณ„๋˜์ง€ ์•Š์€ ๊ฐ€๋น„์ง€๋ฅผ ๋น„์šฐ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [14-16]. ๋‘ ๋ฒˆ์˜ Scavenge ์ฃผ๊ธฐ๋ฅผ ๋ฒ„ํ…จ๋‚ธ ๊ฐ์ฒด๋Š” Old Space๋กœ ์Šน๊ฒฉ๋œ๋‹ค [16, 17]. * **Major GC (Mark-Sweep-Compact):** ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  ์˜ค๋ž˜ ์œ ์ง€๋˜๋Š” Old Space๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค [18, 19]. GC ๋ฃจํŠธ์—์„œ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋งˆํ‚น(Marking) ๋‹จ๊ณ„, ์ฃฝ์€ ๊ฐ์ฒด๊ฐ€ ์ฐจ์ง€ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž์œ  ๋ชฉ๋ก(Free list)์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์Šค์œ„ํ•‘(Sweeping) ๋‹จ๊ณ„, ๋‚จ์€ ๊ฐ์ฒด๋“ค์„ ๋ชจ์•„ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์••์ถ•(Compacting) ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค [19-23]. **์˜ค๋ฆฌ๋…ธ์ฝ”(Orinoco) ํ”„๋กœ์ ํŠธ** * ์ „ํ†ต์ ์ธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ง€์—ฐ(Stop-the-world) ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋œ ์ตœ์‹  GC ์•„ํ‚คํ…์ฒ˜์ด๋‹ค [5, 24]. * ๋ณ‘๋ ฌ(Parallel), ๋™์‹œ(Concurrent), ์ ์ง„์ (Incremental) ์ฒ˜๋ฆฌ ๊ธฐ๋ฒ•์„ ๊ฒฐํ•ฉํ•˜์—ฌ, ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ—ฌํผ ์Šค๋ ˆ๋“œ์—์„œ ๋งˆํ‚น๊ณผ ์Šค์œ„ํ•‘ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ๋˜์—ˆ๋‹ค [25-33]. **๋ณด์•ˆ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”** * **V8 Memory Cage ๋ฐ ํฌ์ธํ„ฐ ์••์ถ•:** 64๋น„ํŠธ ํ”Œ๋žซํผ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด ํฌ์ธํ„ฐ๋ฅผ 64๋น„ํŠธ ์ฃผ์†Œ ๋Œ€์‹  32๋น„ํŠธ ์˜คํ”„์…‹์œผ๋กœ ์ €์žฅํ•˜๋Š” 'Pointer Compression' ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด V8 ํž™์€ 4GB ํฌ๊ธฐ์˜ ์ผ€์ด์ง€(Cage) ์˜์—ญ ์•ˆ์— ๊ฒฉ๋ฆฌ๋œ๋‹ค [34-36]. ์ด๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ์˜ ํƒ€์ž… ํ˜ผ๋™ ์ทจ์•ฝ์  ๋“ฑ์„ ์ด์šฉํ•œ ๊ณต๊ฒฉ์ž๊ฐ€ ์ž„์˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฎ์–ด์“ฐ๊ฑฐ๋‚˜ ์ฝ๋Š” ๊ฒƒ(Arbitrary Read/Write)์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ƒŒ๋“œ๋ฐ•์Šค ์—ญํ• ์„ ํ•œ๋‹ค [4, 37]. * **ํƒœ๊ทธ๋œ ํฌ์ธํ„ฐ (Tagged Pointers):** V8์€ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ๊ฐ ๋‹จ์–ด(word)์˜ ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๋ฅผ ์˜ˆ์•ฝํ•ด ํ•ด๋‹น ๊ฐ’์ด ํฌ์ธํ„ฐ์ธ์ง€ ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ(์ •์ˆ˜ ๋“ฑ)์ธ์ง€ ๊ตฌ๋ถ„ํ•จ์œผ๋กœ์จ, GC๊ฐ€ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ๋น ๋ฅด๊ฒŒ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค [38-40]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Garbage Collection]], [[Orinoco]], [[Pointer Compression]], [[V8 Memory Cage]] - **Projects/Contexts:** [[Node.js]], [[Chrome]], [[Electron]] - **Contradictions/Notes:** ์ปดํŒฉ์…˜(Compaction)์€ ๋‹จํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜์ง€๋งŒ, ์‚ด์•„์žˆ๋Š” ํฐ ๊ฐ์ฒด๋“ค์„ ๋‹ค๋ฅธ ์œ„์น˜๋กœ ๋ณต์‚ฌํ•˜๊ณ  ํฌ์ธํ„ฐ๋ฅผ ๋ชจ๋‘ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋งค์šฐ ๋น„์Œ‰๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Major GC๋Š” Old Space์˜ ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๋งค๋ฒˆ ์••์ถ•ํ•˜์ง€ ์•Š๊ณ  ๋‹จํŽธํ™” ์ •๋„๊ฐ€ ์‹ฌํ•œ ํŽ˜์ด์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์••์ถ•์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [18, 41, 42]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/V8 Engine.md]] ---