--- id: [[P-Reinforce]]-AUTO-109DBE category: "10_Wiki/πŸ’‘ Topics/Programming & Language" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - νž™ λ©”λͺ¨λ¦¬(Heap [[memory]])" --- # [[νž™ λ©”λͺ¨λ¦¬(Heap Memory)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > νž™ λ©”λͺ¨λ¦¬(Heap Memory)λŠ” ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ ν¬κΈ°λ‚˜ μˆ˜λŸ‰μ„ 컴파일 νƒ€μž„μ— κ²°μ •ν•  수 μ—†λŠ” 동적 데이터와 객체λ₯Ό μ €μž₯ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μž…λ‹ˆλ‹€ [1-3]. 운영 μ²΄μ œκ°€ μžλ™μœΌλ‘œ ꡬ쑰λ₯Ό κ΄€λ¦¬ν•˜λŠ” μŠ€νƒ(Stack)κ³Ό 달리, νž™ λ©”λͺ¨λ¦¬λŠ” κ°€λΉ„μ§€ 컬렉터(Garbage Collector)λ₯Ό 톡해 더 이상 μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” 객체의 λ©”λͺ¨λ¦¬λ₯Ό μ‹λ³„ν•˜κ³  주기적으둜 νšŒμˆ˜ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΄€λ¦¬λ©λ‹ˆλ‹€ [4-6]. 특히 V8 엔진은 λ©”λͺ¨λ¦¬ ν• λ‹Ή 및 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜μ˜ νš¨μœ¨μ„±μ„ κ·ΉλŒ€ν™”ν•˜κΈ° μœ„ν•΄ 객체의 μ˜ˆμƒ 수λͺ…([[Generational Hypothesis]])에 따라 νž™μ„ μ—¬λŸ¬ μ„ΈλŒ€λ³„ κ³΅κ°„μœΌλ‘œ λ‚˜λˆ„μ–΄ κ΅¬μ‘°ν™”ν•©λ‹ˆλ‹€ [7-9]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **νž™ λ©”λͺ¨λ¦¬μ˜ μ—­ν• κ³Ό ꡬ쑰** * νž™ λ©”λͺ¨λ¦¬λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 객체, λ°°μ—΄, ν•¨μˆ˜μ™€ 같이 λ™μ μœΌλ‘œ μƒμ„±λ˜λŠ” 데이터λ₯Ό μ €μž₯ν•˜λŠ” μ£Όμš” μ˜μ—­μž…λ‹ˆλ‹€ [2, 3]. * 단일 ν”„λ‘œμ„ΈμŠ€ 레벨 λ©”λͺ¨λ¦¬μΈ λ ˆμ§€λ˜νŠΈ μ„ΈνŠΈ(Resident Set) 내에 μ‘΄μž¬ν•˜λ©°, νž™μ˜ 전체 ν¬κΈ°λŠ” κ³ μ •λ˜μ–΄ μžˆμ§€ μ•Šμ•„ ν• λ‹Ή κ°€λŠ₯ν•œ λ©”λͺ¨λ¦¬λ₯Ό μ΄ˆκ³Όν•˜λ©΄ "Out of Memory(OOM)" 였λ₯˜λ₯Ό 일으켜 ν”„λ‘œκ·Έλž¨μ΄ μΆ©λŒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 10]. * **V8 μ—”μ§„μ˜ νž™ 곡간 λΆ„ν•  (Heap Organization)** * κ°€λΉ„μ§€ 컬렉터가 μ΅œμ ν™”λœ μ•Œκ³ λ¦¬μ¦˜μ„ μ μš©ν•  수 μžˆλ„λ‘, V8 엔진은 νž™μ„ 객체의 생쑴 주기와 νŠΉμ„±μ— 맞게 μ—¬λŸ¬ 곡간(Space)으둜 λΆ„ν• ν•©λ‹ˆλ‹€ [8]. * **μƒˆλ‘œμš΄ 곡간 (New Space / Young Generation):** λŒ€λΆ€λΆ„μ˜ μƒˆλ‘œμš΄ 객체가 처음 ν• λ‹Ήλ˜λŠ” μ˜μ—­μž…λ‹ˆλ‹€ [8, 11]. μž‘κ³  λΉ λ₯Έ 처리λ₯Ό μœ„ν•΄ μ„€κ³„λ˜μ—ˆμœΌλ©°, λŒ€λΆ€λΆ„μ˜ 객체가 일찍 μ†Œλ©Έν•œλ‹€λŠ” 가섀에 따라 짧은 주기둜 λΉˆλ²ˆν•˜κ²Œ λ§ˆμ΄λ„ˆ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜([[Scavenge]]r)이 λ°œμƒν•©λ‹ˆλ‹€ [7, 11-13]. * **였래된 곡간 ([[Old Space]] / Old Generation):** μƒˆλ‘œμš΄ κ³΅κ°„μ—μ„œ μ΅œμ†Œ 두 번의 κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μ£ΌκΈ°λ₯Ό 거치고 살아남은 객체듀이 승격(Promoted)λ˜μ–΄ μ΄λ™ν•˜λŠ” κ³΅κ°„μž…λ‹ˆλ‹€ [7, 14]. λ‚΄λΆ€μ μœΌλ‘œ λ‹€λ₯Έ 객체λ₯Ό μ°Έμ‘°ν•˜λŠ” 포인터 객체 μ˜μ—­(Old-pointer-space)κ³Ό λ¬Έμžμ—΄μ΄λ‚˜ 숫자 같은 μ›μ‹œ λ°μ΄ν„°λ§Œ κ°€μ§€λŠ” 객체 μ˜μ—­(Old-data-space)으둜 μ„ΈλΆ„ν™”λ©λ‹ˆλ‹€ [8, 11]. * **λŒ€ν˜• 객체 곡간 (Large Object Space):** λ‹€λ₯Έ κ³΅κ°„μ˜ 크기 μ œν•œμ„ μ΄ˆκ³Όν•˜λŠ” λŒ€ν˜• 객체가 μ €μž₯되며, κ°€λΉ„μ§€ 컬렉터에 μ˜ν•΄ μ ˆλŒ€ μ΄λ™λ˜μ§€ μ•Šκ³  μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° 자체적인 λ©”λͺ¨λ¦¬ μ˜μ—­(mmap)을 ν• λ‹Ήλ°›μŠ΅λ‹ˆλ‹€ [3, 8, 11]. * **기타 특수 곡간:** JIT μ»΄νŒŒμΌλŸ¬κ°€ μƒμ„±ν•œ μ‹€ν–‰ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μ €μž₯ν•˜λŠ” μ½”λ“œ 곡간(Code Space) 및 κ· μΌν•œ 크기λ₯Ό κ°–λŠ” 객체(Map, Cell, PropertyCell)λ“€λ§Œμ„ μ €μž₯ν•˜μ—¬ 관리λ₯Ό λ‹¨μˆœν™”ν•˜λŠ” 특수 곡간듀이 μžˆμŠ΅λ‹ˆλ‹€ [3, 8, 11]. * **λ©”λͺ¨λ¦¬ 관리 및 λˆ„μˆ˜ 뢄석 (Memory [[Management]] & Leaks)** * νž™ λ©”λͺ¨λ¦¬λŠ” 루트 객체(μŠ€νƒ λ³€μˆ˜λ‚˜ μ „μ—­ μ°½ 객체 λ“±)λ‘œλΆ€ν„° 포인터 μ°Έμ‘° 체인을 따라 도달할 수 μžˆλŠ”μ§€λ₯Ό κΈ°μ€€μœΌλ‘œ 'ν™œμ„±(live)' 객체와 'κ°€λΉ„μ§€(dead)' 객체λ₯Ό μ‹λ³„ν•˜μ—¬ λΆˆν•„μš”ν•΄μ§„ λ©”λͺ¨λ¦¬λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€ [14-17]. * ν”„λ‘œκ·Έλž¨μ—μ„œ 더 이상 ν•„μš”ν•˜μ§€ μ•Šμ€ 객체가 μ—¬μ „νžˆ λ£¨νŠΈλ‘œλΆ€ν„° μ°Έμ‘°λ₯Ό μœ μ§€ν•˜κ³  μžˆμ–΄ κ°€λΉ„μ§€ 컬렉터가 이λ₯Ό νšŒμˆ˜ν•˜μ§€ λͺ»ν•˜κ³  νž™μ— λˆ„μ λ  λ•Œ, 이λ₯Ό λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)라고 ν•©λ‹ˆλ‹€ [18-20]. * κ°œλ°œμžλ“€μ€ 크둬 개발자 λ„κ΅¬μ˜ νž™ μŠ€λƒ…μƒ·([[Heap Snapshot]])μ΄λ‚˜ ν• λ‹Ή νƒ€μž„λΌμΈ([[Allocation Timeline]]) λ“±μ˜ 도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬, νž™ λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•˜λŠ” 객체 고유의 크기(Shallow size)와 ν•΄λ‹Ή 객체 μ‚­μ œ μ‹œ 확보 κ°€λŠ₯ν•œ μœ μ§€ 크기(Retained size)λ₯Ό ν™•μΈν•˜κ³ , μ°Έμ‘°λ₯Ό μœ μ§€ν•˜λŠ” 경둜([[Retaining Path]])λ₯Ό μΆ”μ ν•¨μœΌλ‘œμ¨ λˆ„μˆ˜ 원인을 식별할 수 μžˆμŠ΅λ‹ˆλ‹€ [21-23]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** κ°€λΉ„μ§€ μ»¬λ ‰μ…˜([[Garbage Collection]]), μŠ€νƒ λ©”λͺ¨λ¦¬(Stack Memory), λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak), V8 μ—”μ§„([[V8 Engine]]) - **Projects/Contexts:** Node.js λ©”λͺ¨λ¦¬ 관리(Node.js [[Memory Management]]), 크둬 개발자 도ꡬ νž™ ν”„λ‘œνŒŒμΌλ§([[Chrome DevTools]] Heap Profiling) - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ V8 λ©”λͺ¨λ¦¬ 케이지(V8 Memory Cage)와 포인터 μ••μΆ•([[Pointer Compression]]) 기술이 ν™œμ„±ν™”λœ ν™˜κ²½(예: [[Chrome]] 103 및 [[Electron]] 21 이상)μ—μ„œλŠ” μ‹œμŠ€ν…œμ— RAM이 ν’λΆ€ν•œ 64λΉ„νŠΈ ν”Œλž«νΌμ—μ„œ μ‹€ν–‰λ˜λ”λΌλ„ V8 νž™μ˜ μ΅œλŒ€ 크기가 4GB둜 μ—„κ²©ν•˜κ²Œ μ œν•œλœλ‹€λŠ” 특이점이 μžˆμŠ΅λ‹ˆλ‹€ [24-27]. --- *Last updated: 2026-04-19* ---