--- id: P-REINFORCE-AUTO-AABE4C category: "[[10_Wiki/๐Ÿ’ก Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - JavaScript ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ(JavaScript Memory Management)" --- # [[JavaScript ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ(JavaScript Memory Management)]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > ์ง€์‹ ์š”์•ฝ ์ •๋ณด ์ถ”์ถœ ์ค‘... ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **์Šคํƒ(Stack)๊ณผ ํž™(Heap) ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ** * **์Šคํƒ(Stack):** ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ •์  ๋ฐ์ดํ„ฐ(๋ฉ”์„œ๋“œ/ํ•จ์ˆ˜ ํ”„๋ ˆ์ž„, ์›์‹œ ๊ฐ’, ํž™ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ ๋“ฑ)๋ฅผ ์ €์žฅํ•˜๋Š” ์˜์—ญ์œผ๋กœ LIFO ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [2-4]. * **ํž™(Heap):** ํฌ๊ธฐ๋ฅผ ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •ํ•  ์ˆ˜ ์—†๋Š” ๋™์  ๋ฐ์ดํ„ฐ ๋ฐ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜ํ•ด ์ง์ ‘ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [3, 10]. V8์€ ํž™์„ ์—ฌ๋Ÿฌ ๊ณต๊ฐ„(Space)์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. **ํž™์˜ ์„ธ๋Œ€๋ณ„ ๊ตฌ์„ฑ (Generational Layout)** V8์€ ๊ฐ์ฒด์˜ ์ˆ˜๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ํž™์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [6, 7]. * **New Space (Young Generation):** ์ž‘๊ณ  ์ˆ˜๋ช…์ด ์งง์€ ๋Œ€๋ถ€๋ถ„์˜ ์ƒˆ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค [6, 11-13]. ๋‚ด๋ถ€์ ์œผ๋กœ ๋‘ ๊ฐœ์˜ ๋ฐ˜๊ณต๊ฐ„(To-Space์™€ From-Space)์œผ๋กœ ๋‚˜๋‰˜์–ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค [14-16]. * **Old Space (Old Generation):** New Space์—์„œ ์ผ์ •ํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ฃผ๊ธฐ(ํ†ต์ƒ 2ํšŒ)๋ฅผ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์Šน๊ฒฉ(Promote)๋˜์–ด ์ด๋™ํ•˜๋Š” ํฐ ๊ณต๊ฐ„์œผ๋กœ, ํฌ์ธํ„ฐ ์˜์—ญ๊ณผ ๋ฐ์ดํ„ฐ ์˜์—ญ์œผ๋กœ ๋” ๋‚˜๋‰ฉ๋‹ˆ๋‹ค [6, 11, 13, 17, 18]. * **๊ธฐํƒ€ ์˜์—ญ:** ํฌ๊ธฐ๊ฐ€ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ Large Object Space, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋จธ์‹  ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” Code Space ๋“ฑ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [11, 19]. **๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection) ๋ฉ”์ปค๋‹ˆ์ฆ˜** V8 ์—”์ง„์€ ์ฃผ๋กœ ๋‘ ๊ฐ€์ง€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค [20]. * **๋งˆ์ด๋„ˆ GC (Scavenger):** New Space์—์„œ ๋นˆ๋ฒˆํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค [6, 14, 20]. Cheney์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ํ™œ์„ฑ ๊ฐ์ฒด๋ฅผ ์ถ”์ ํ•œ ๋’ค To-Space๋กœ ๋Œ€ํ”ผ(Copy/Evacuate)์‹œํ‚ค๊ณ  ๊ธฐ์กด From-Space์˜ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ผ๊ด„ ๋น„์›Œ ๋‹จํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค [14, 15, 17]. * **๋ฉ”์ด์ € GC (Mark-Sweep-Compact):** Old Space ์ „์ฒด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค [6, 20, 21]. ์Šคํƒ๊ณผ ์ „์—ญ ๊ฐ์ฒด ๊ฐ™์€ ๋ฃจํŠธ(Root)์—์„œ ์ถœ๋ฐœํ•ด ํฌ์ธํ„ฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„(Mark)ํ•˜๊ณ , ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜(Sweep)ํ•œ ๋’ค, ํŒŒํŽธํ™”๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ•„์š”์‹œ ๊ฐ์ฒด๋“ค์„ ์••์ถ•(Compact)ํ•ฉ๋‹ˆ๋‹ค [5, 8, 21-24]. * **์˜ค๋ฆฌ๋…ธ์ฝ”(Orinoco):** ์ตœ์‹  V8์˜ GC ํ”„๋กœ์ ํŠธ๋กœ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ์ •์ง€ ์‹œ๊ฐ„(Stop-the-world)์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋ณ‘๋ ฌ(Parallel), ์ ์ง„์ (Incremental), ๋™์‹œ(Concurrent) ์Šค๋ ˆ๋”ฉ ๋ฐฉ์‹์„ ๋„์ž…ํ•˜์—ฌ JS ์‹คํ–‰๊ณผ GC ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ๊ต์ฐจ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [25-31]. **๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leaks)์™€ ์ตœ์ ํ™”** * ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋” ์ด์ƒ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์“ฐ์ด์ง€ ์•Š์Œ์—๋„ GC ๋ฃจํŠธ(์ „์—ญ ๋ณ€์ˆ˜, ํด๋กœ์ €, ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ, ์žŠํ˜€์ง„ ํƒ€์ด๋จธ ๋“ฑ)์—์„œ ์ฐธ์กฐ๋ฅผ ๊ณ„์† ์œ ์ง€ํ•˜์—ฌ GC๊ฐ€ ์ˆ˜๊ฑฐํ•˜์ง€ ๋ชปํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [32-37]. * ํ•ด๊ฒฐ ๋ฐ ํƒ์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” Chrome DevTools์˜ Heap Snapshot์„ ์‚ฌ์šฉํ•ด ์„ธ ๋ฒˆ์˜ ์Šค๋ƒ…์ƒท์„ ๋น„๊ตํ•˜๋Š” ๊ธฐ๋ฒ•, Allocation Timeline์„ ํ†ตํ•œ ํž™ ํ• ๋‹น ์ถ”์ , Node.js์˜ `--trace-gc` ํ”Œ๋ž˜๊ทธ ๋ฐ `process.memoryUsage()`๋ฅผ ํ†ตํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค [38-42]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Garbage Collection (๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)]], [[V8 Engine (V8 ์—”์ง„)]], [[Generational Hypothesis (์„ธ๋Œ€ ๊ฐ€์„ค)]], [[Memory Leak (๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜)]] - **Projects/Contexts:** [[Chrome DevTools ๋ฉ”๋ชจ๋ฆฌ ๋ถ„์„]], [[Node.js ๋ฉ”๋ชจ๋ฆฌ ํŠœ๋‹]] - **Contradictions/Notes:** ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์˜ ๋ณต์žก์„ฑ์„ ํฌ๊ฒŒ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ œ์–ด๊ถŒ์„ ์™„์ „ํžˆ ์ƒ์‹คํ•˜๊ฒŒ ๋œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [1, 43]. ๋˜ํ•œ GC ์‹คํ–‰ ์‹œ ๋ถˆ๊ทœ์น™ํ•œ ์ผ์‹œ ์ •์ง€ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ด ๋Œ€ํ™”ํ˜• ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ [43], 64๋น„ํŠธ ํ”Œ๋žซํผ์—์„œ V8 ํž™์€ ํฌ์ธํ„ฐ ์••์ถ•(Pointer Compression) ๋ณด์•ˆ ๊ธฐ์ˆ ๋กœ ์ธํ•ด 4GB์˜ ํฌ๊ธฐ ์ œํ•œ(V8 Memory Cage)์„ ๊ฐ–๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค [44-46]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/JavaScript ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ(JavaScript Memory Management).md]] ---