--- id: P-REINFORCE-AUTO-326FC1 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)" --- # [[V8 แ„’แ…ตแ†ธ(Heap)|V8 ํž™(Heap)]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > V8 ํž™(Heap)์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ๋™์  ๋ฐ์ดํ„ฐ์™€ ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๋‚˜ ์ˆ˜๋ช… ๋“ฑ์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ž…๋‹ˆ๋‹ค [1, 2]. ์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด V8 ์—”์ง„์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(Garbage Collector)์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์žฌํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [3, 4]. ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด V8์€ ๊ฐ์ฒด์˜ ์˜ˆ์ƒ ์ˆ˜๋ช…์— ๋”ฐ๋ผ ํž™์„ '์ƒˆ๋กœ์šด ์„ธ๋Œ€(Young Generation)'์™€ '์˜ค๋ž˜๋œ ์„ธ๋Œ€(Old Generation)' ๋“ฑ ์—ฌ๋Ÿฌ ํŠน์ˆ˜ํ•œ ๊ณต๊ฐ„(Space)์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค [5-7]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **ํž™ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ถ„ํ•  ๊ตฌ์กฐ (Heap Organization)** V8 ์—”์ง„์€ "๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ์ผ์ฐ ์ฃฝ๋Š”๋‹ค"๋Š” ์„ธ๋Œ€ ๊ฐ€์„ค(Generational Hypothesis)์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ํšจ์œจ์ ์ธ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํž™์„ ์—ฌ๋Ÿฌ ํŠน์ˆ˜ํ•œ ๊ณต๊ฐ„์œผ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค [5, 6, 8]. * **New Space (Young Generation):** ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜๋Š” ๋งค์šฐ ์ž‘๊ณ  ๋น ๋ฅธ ์˜์—ญ์ž…๋‹ˆ๋‹ค [9, 10]. ํฌ๊ธฐ๋Š” ๋ณดํ†ต 1~8MB ํ˜น์€ ์ตœ๋Œ€ 64MB ์ •๋„์ด๋ฉฐ, Scavenger(Minor GC) ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ฒญ์†Œ๋ฉ๋‹ˆ๋‹ค [2, 5, 11]. ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ 'To-Space'์™€ 'From-Space' ๋ฐ˜๊ณต๊ฐ„(semi-space)์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์ƒ์กดํ•œ ๊ฐ์ฒด๋ฅผ ๋Œ€ํ”ผ(evacuate)์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‹จํŽธํ™”๋ฅผ ์—†์•ฑ๋‹ˆ๋‹ค [11-14]. * **Old Space (Old Generation):** New Space์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ฃผ๊ธฐ(์ฃผ๋กœ 2ํšŒ)๋ฅผ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์Šน๊ฒฉ(Promotion)๋˜์–ด ์ด๋™ํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค [5, 7, 10, 15]. ๊ณต๊ฐ„์ด ๋งค์šฐ ํฌ๊ธฐ ๋•Œ๋ฌธ์— Major GC(Mark-Sweep-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜)์— ์˜ํ•ด ๋œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [5, 10, 16, 17]. ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง„ 'Old-pointer-space'์™€ ์ˆœ์ˆ˜ ๋ฐ์ดํ„ฐ๋งŒ ์žˆ๋Š” 'Old-data-space'๋กœ ์„ธ๋ถ„ํ™”๋ฉ๋‹ˆ๋‹ค [2, 9, 18]. * **Large Object Space:** ๋‹ค๋ฅธ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋Š” ๋Œ€์šฉ๋Ÿ‰ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋ฉฐ, ๊ฐ๊ฐ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ณ„๋„์˜ mmap ์˜์—ญ์„ ํ• ๋‹น๋ฐ›์Šต๋‹ˆ๋‹ค [2, 9, 18]. ์ด๊ณณ์˜ ๊ฐ์ฒด๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ์ ˆ๋Œ€ ์ด๋™๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [2, 9]. * **Code Space:** JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋จธ์‹  ์ฝ”๋“œ ๋ช…๋ น์ด ์ €์žฅ๋˜๋Š” ์œ ์ผํ•œ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค [2, 9, 18]. * **๊ธฐํƒ€ ๊ณต๊ฐ„ (Map, Cell, Property-cell Space):** ํฌ๊ธฐ๊ฐ€ ๋™์ผํ•˜๊ณ  ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ์ฒด์˜ ์ œ์•ฝ์ด ์žˆ๋Š” V8 ๋‚ด๋ถ€ ๊ตฌ์กฐ์ฒด(Map, Cell ๋“ฑ)๋“ค์„ ์ €์žฅํ•˜์—ฌ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค [2, 9, 18]. **ํŽ˜์ด์ง€(Pages)์™€ ๋ฉ”๋ชจ๋ฆฌ ์ƒŒ๋“œ๋ฐ•์‹ฑ** * ๊ฐ ํž™ ๊ณต๊ฐ„์€ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ์ธ 'ํŽ˜์ด์ง€(Pages)'์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [18-20]. ๊ฐ ํŽ˜์ด์ง€๋Š” ์ „ํ†ต์ ์œผ๋กœ 1MB ํฌ๊ธฐ์˜€์œผ๋‚˜, ์ตœ๊ทผ ์ €๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๊ธฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ์ค„์ด๊ณ  ์ปดํŒฉ์…˜(Compaction) ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด 512KB๋กœ ์ค„์–ด๋“œ๋Š” ์ตœ์ ํ™”๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค [18, 19, 21, 22]. * 64๋น„ํŠธ ํ”Œ๋žซํผ์—์„œ V8์€ ํฌ์ธํ„ฐ ์••์ถ•(Pointer Compression) ๊ธฐ์ˆ ๊ณผ 'V8 ๋ฉ”๋ชจ๋ฆฌ ์ผ€์ด์ง€(Memory Cage)'๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค [23-25]. ์ด๋กœ ์ธํ•ด ํž™ ๋‚ด์˜ ํฌ์ธํ„ฐ๋Š” 32๋น„ํŠธ ์˜คํ”„์…‹์œผ๋กœ ์ €์žฅ๋˜์–ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ ˆ๊ฐ๋˜์ง€๋งŒ, V8 ํž™ ์ „์ฒด ํฌ๊ธฐ๊ฐ€ ์ตœ๋Œ€ 4GB๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค [25, 26]. **ํž™ ๋ฉ”๋ชจ๋ฆฌ ์ธก์ • ๋ฐ ์„ฑ๋Šฅ ํŠœ๋‹** * Node.js ํ™˜๊ฒฝ์—์„œ๋Š” `process.memoryUsage()`๋ฅผ ํ†ตํ•ด `heapTotal`(ํ• ๋‹น๋œ ์ด ํž™ ํฌ๊ธฐ)๊ณผ `heapUsed`(์‚ฌ์šฉ ์ค‘์ธ ํž™ ํฌ๊ธฐ)๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [27]. * ํž™์— ๋ถˆํ•„์š”ํ•œ ์ฐธ์กฐ๊ฐ€ ๋‚จ์•„ ๊ฐ์ฒด๊ฐ€ ์ˆ˜๊ฑฐ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak) ๋ฌธ์ œ๋Š” Chrome DevTools์˜ Heap Snapshot์ด๋‚˜ Allocation Timeline ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด ์œ ์ง€ ๊ฒฝ๋กœ(Retaining Path)๋ฅผ ์ถ”์ ํ•จ์œผ๋กœ์จ ์ง„๋‹จํ•˜๊ณ  ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [28-32]. * ์‚ฌ์šฉ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠน์„ฑ์— ๋งž๊ฒŒ `--max-old-space-size` ๋ฐ `--max-semi-space-size`์™€ ๊ฐ™์€ ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํž™์˜ ์ฃผ์š” ๊ณต๊ฐ„ ํฌ๊ธฐ๋ฅผ ์ˆ˜๋™์œผ๋กœ ํŠœ๋‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [33, 34]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[แ„€แ…กแ„‡แ…ตแ„Œแ…ต แ„แ…ฅแ†ฏแ„…แ…ฆแ†จแ„‰แ…งแ†ซ(Garbage Collection)|๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)]], [[แ„‰แ…ฆแ„ƒแ…ข แ„€แ…กแ„‰แ…ฅแ†ฏ(Generational Hypothesis)|์„ธ๋Œ€ ๊ฐ€์„ค(Generational Hypothesis)]], [[แ„‘แ…ฉแ„‹แ…ตแ†ซแ„แ…ฅ แ„‹แ…กแ†ธแ„Žแ…ฎแ†จ(Pointer Compression)|ํฌ์ธํ„ฐ ์••์ถ•(Pointer Compression)]], [[Scavenger(Minor GC)|Scavenger(Minor GC)]], Mark-Sweep-Compact(Major GC) - **Projects/Contexts:** [[Node.js|Node.js]], [[Google Chrome|Google Chrome]], [[Orinoco(V8 GC แ„‘แ…ณแ„…แ…ฉแ„Œแ…ฆแ†จแ„แ…ณ)|Orinoco(V8 GC ํ”„๋กœ์ ํŠธ)]] - **Contradictions/Notes:** ์†Œ์Šค ๊ฐ„์˜ ๋ณธ์งˆ์  ๋ชจ์ˆœ์€ ์—†์œผ๋‚˜, V8 ์—”์ง„์˜ ์ง€์†์ ์ธ ์ง„ํ™”๋กœ ์ธํ•ด ํŽ˜์ด์ง€ ํฌ๊ธฐ๊ฐ€ 1MB์—์„œ 512KB๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๋“ฑ ์‹œ๊ฐ„์˜ ํ๋ฆ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„์— ๋”ฐ๋ฅธ ๊ตฌ์กฐ ์ตœ์ ํ™” ๋ณ€ํ™”๊ฐ€ ์†Œ์Šค์— ํ˜ผ์žฌ๋˜์–ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/V8 ํž™(Heap).md ---