--- id: P-REINFORCE-AUTO-0C14B5 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 Heap Architecture" --- # [[V8 Heap Architecture|V8 Heap Architecture]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > V8 ์—”์ง„์˜ ํž™(Heap) ์•„ํ‚คํ…์ฒ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„์— ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์กฐํ™”๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๋‹ค [1]. V8์€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์†๋„๋ฅผ ๋†’์ด๊ณ  ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด, ๊ฐ์ฒด์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ์— ๊ธฐ๋ฐ˜ํ•œ '์„ธ๋Œ€๋ณ„ ๊ฐ€์„ค(Generational Hypothesis)'์„ ์ ์šฉํ•˜์—ฌ ํž™์„ ์—ฌ๋Ÿฌ ํŠน์ˆ˜ ๊ณต๊ฐ„(Space)์œผ๋กœ ๋ถ„ํ• ํ•œ๋‹ค [2, 3]. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ํŠน์„ฑ์— ๋งž๋Š” ์ตœ์ ํ™”๋œ ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค [2]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **ํž™์˜ ์ฃผ์š” ๊ณต๊ฐ„(Spaces)** V8์˜ ํž™์€ ๊ฐ์ฒด์˜ ํŠน์„ฑ๊ณผ ์ˆ˜๋ช…์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ณ ์œ ํ•œ ๊ณต๊ฐ„์œผ๋กœ ๋‚˜๋‰˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค. * **New Space (Young Generation)**: ๋Œ€๋ถ€๋ถ„์˜ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ตœ์ดˆ๋กœ ํ• ๋‹น๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ, 1MB์—์„œ 8MB(๋˜๋Š” 64MB) ์‚ฌ์ด์˜ ์ž‘์€ ํฌ๊ธฐ๋กœ ์œ ์ง€๋œ๋‹ค [4-6]. ์ด ๊ณต๊ฐ„์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ 'To-Space'์™€ 'From-Space'๋ผ๋Š” ๋‘ ๊ฐœ์˜ ๋™์ผํ•œ ๋ฐ˜๊ณต๊ฐ„(semi-space)์œผ๋กœ ๋‚˜๋‰œ๋‹ค [6, 7]. ์ด ์˜์—ญ์€ Scavenger๋ผ ๋ถˆ๋ฆฌ๋Š” Minor GC ์•Œ๊ณ ๋ฆฌ์ฆ˜(Cheney's algorithm ๊ธฐ๋ฐ˜)์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, ์—ฌ๊ธฐ์„œ ๋‘ ๋ฒˆ์˜ GC ์ฃผ๊ธฐ๋ฅผ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old Space๋กœ ์ด๋™(์Šน๊ฒฉ, Promotion)๋œ๋‹ค [5-7]. * **Old Space (Old Generation)**: New Space์—์„œ ์‚ด์•„๋‚จ์€ ์ˆ˜๋ช…์ด ๊ธด ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ ํ›จ์”ฌ ๋” ํฐ ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค [4, 5, 8]. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ๋งˆํ‚น ์†๋„๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด, ๋‹ค๋ฅธ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” **Old-pointer-space**์™€ ๋ฌธ์ž์—ด์ด๋‚˜ ๋ฐ•์‹ฑ๋œ ์ˆซ์ž์ฒ˜๋Ÿผ ์›์‹œ ๋ฐ์ดํ„ฐ๋งŒ ํฌํ•จํ•˜์—ฌ ํฌ์ธํ„ฐ ์ถ”์ ์ด ํ•„์š” ์—†๋Š” **Old-data-space**๋กœ ์„ธ๋ถ„ํ™”๋œ๋‹ค [2, 4, 8]. ์ด ๊ณต๊ฐ„์€ Mark-Sweep-Compact ๋ฐฉ์‹์˜ Major GC์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค [9]. * **Large Object Space**: ๋‹ค๋ฅธ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ ์ œํ•œ(์ผ๋ฐ˜์ ์œผ๋กœ 1MB)์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋œ๋‹ค [2, 4]. ๊ฐ ๊ฐ์ฒด๋Š” ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ `mmap`์„ ํ†ตํ•ด ์ง์ ‘ ํ• ๋‹น๋ฐ›์€ ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€์ง€๋ฉฐ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ๊ฒฐ์ฝ” ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๊ฐ€ ์ด๋™๋˜์ง€ ์•Š๋Š”๋‹ค [2, 4]. * **Code Space**: JIT(Just-In-Time) ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ(Code objects)๊ฐ€ ํ• ๋‹น๋˜๋Š” ๊ณณ์ด๋‹ค [2, 4]. ํž™ ๋‚ด์—์„œ ์œ ์ผํ•˜๊ฒŒ ์‹คํ–‰ ๊ถŒํ•œ(Executable)์ด ๋ถ€์—ฌ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด๋‹ค [2, 4]. * **ํŠน์ˆ˜ ๋ฐ ๋ถˆ๋ณ€ ๊ณต๊ฐ„**: ๋ชจ๋“  ๊ฐ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ๋™์ผํ•˜์—ฌ ์ˆ˜์ง‘์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋Š” **Cell-space**, **Property-cell-space**, **Map-space**๊ฐ€ ์žˆ์œผ๋ฉฐ [4, 10], ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ์ด๋™ํ•˜์ง€ ์•Š๋Š” ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” **Read Only Space**๋„ ์กด์žฌํ•œ๋‹ค [11]. **ํŽ˜์ด์ง€(Pages) ๊ตฌ์กฐ** ํž™์˜ ๊ฐ ๊ณต๊ฐ„์€ 'ํŽ˜์ด์ง€(Pages)'๋ผ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค [3, 12]. * ์ผ๋ฐ˜์ ์œผ๋กœ ํŽ˜์ด์ง€์˜ ํฌ๊ธฐ๋Š” 1MB์ด๋ฉฐ 1MB ๋‹จ์œ„๋กœ ์ •๋ ฌ๋˜์ง€๋งŒ, Large Object Space์˜ ํŽ˜์ด์ง€๋Š” ๋” ํด ์ˆ˜ ์žˆ๋‹ค [12]. ์ตœ๊ทผ์—๋Š” ์ €๋ฉ”๋ชจ๋ฆฌ ํ™˜๊ฒฝ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ํŽ˜์ด์ง€ ํฌ๊ธฐ๋ฅผ 512KB๋กœ ์ค„์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๊ณ  ์••์ถ• ํšจ์œจ์„ ๋†’์ธ ์‚ฌ๋ก€๋„ ์žˆ๋‹ค [3, 13, 14]. * ๊ฐ ํŽ˜์ด์ง€์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ฐ์ฒด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํ”Œ๋ž˜๊ทธ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธด ํ—ค๋”(Header), ๋ผ์ด๋ธŒ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋งˆํ‚น ๋น„ํŠธ๋งต(Marking bitmap)์ด ํฌํ•จ๋œ๋‹ค [3, 12]. * ๋˜ํ•œ ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ์Šฌ๋กฏ ๋ฒ„ํผ(Slots buffer)๋ฅผ ๊ฐ€์ ธ, ํ•ด๋‹น ํŽ˜์ด์ง€์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์˜ ํฌ์ธํ„ฐ ๋ชฉ๋ก์ธ '๊ธฐ์–ต ์ง‘ํ•ฉ(Remembered set)'์„ ํ˜•์„ฑํ•œ๋‹ค [3, 12]. **ํฌ์ธํ„ฐ ์••์ถ•๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ผ€์ด์ง€(V8 Memory Cage)** ๋ณด์•ˆ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด V8์€ 64๋น„ํŠธ ํ”Œ๋žซํผ์—์„œ 'ํฌ์ธํ„ฐ ์••์ถ•(Pointer Compression)' ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•œ๋‹ค [15, 16]. * ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ 64๋น„ํŠธ ์ „์ฒด ์ฃผ์†Œ ๋Œ€์‹ , ๊ธฐ์ค€ ์ฃผ์†Œ(Base address)๋กœ๋ถ€ํ„ฐ์˜ 32๋น„ํŠธ ์˜คํ”„์…‹(Offset)์œผ๋กœ ์ €์žฅํ•˜์—ฌ ๊ฐ์ฒด ํฌ์ธํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ธ๋‹ค [16]. * ์ด ๋ฐฉ์‹์€ ๊ตฌ์กฐ์ ์œผ๋กœ ๋ชจ๋“  V8 ํž™ ๊ฐ์ฒด๊ฐ€ 4GB ํฌ๊ธฐ์˜ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ธ "์ผ€์ด์ง€(Cage)" ๋‚ด๋ถ€์— ๊ฐ‡ํ˜€ ์žˆ๋„๋ก ๊ฐ•์ œํ•œ๋‹ค [16, 17]. ๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋ฌด๋ฆฌ ๋งŽ์•„๋„, ๋‹จ์ผ V8 ์ธ์Šคํ„ด์Šค์˜ ๊ด€๋ฆฌ๋˜๋Š” ํž™ ํฌ๊ธฐ๋Š” 4GB๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†๋‹ค [17, 18]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], [[Generational Hypothesis|Generational Hypothesis]], [[V8 Memory Cage|V8 Memory Cage]], [[Pointer Compression|Pointer Compression]] - **Projects/Contexts:** [[Google Chrome|Google Chrome]], [[Node.js|Node.js]], [[Electron|Electron]] - **Contradictions/Notes:** ์ผ๋ฐ˜์ ์œผ๋กœ V8 ํŽ˜์ด์ง€์˜ ํฌ๊ธฐ๋Š” 1MB๋กœ ์•Œ๋ ค์ ธ ์žˆ์œผ๋‚˜ [12], ๋ชจ๋ฐ”์ผ ์žฅ์น˜๋‚˜ ๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ์—์„œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๊ฐœ์„  ๋ฐ ์‚ฌ์šฉ๋Ÿ‰ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด 512KB๋กœ ์ถ•์†Œ ์ ์šฉ๋˜๊ธฐ๋„ ํ•˜์˜€๋‹ค [13, 14]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/V8 Heap Architecture.md ---