--- id: P-REINFORCE-AUTO-5A05AF category: "10_Wiki/πŸ’‘ Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Memory Leaks" --- # [[Memory Leaks|Memory Leaks]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Three.js 및 WebGL ν™˜κ²½μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leaks)λŠ” GPU λ¦¬μ†ŒμŠ€κ°€ μžλ™μœΌλ‘œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(Garbage Collection)λ˜μ§€ μ•Šμ•„ VRAM λ“± λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ΄ μ§€μ†μ μœΌλ‘œ μ¦κ°€ν•˜λŠ” ν˜„μƒμ„ μ˜λ―Έν•©λ‹ˆλ‹€ [1]. μ΄λŠ” 주둜 μ§€μ˜€λ©”νŠΈλ¦¬, 재질, ν…μŠ€μ²˜ λ“±μ˜ λ Œλ”λ§ λ¦¬μ†ŒμŠ€λ₯Ό μ½”λ“œ μƒμ—μ„œ λͺ…μ‹œμ μœΌλ‘œ ν•΄μ œν•˜μ§€ μ•Šμ•˜μ„ λ•Œ λ°œμƒν•©λ‹ˆλ‹€ [1, 2]. λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•˜λ €λ©΄ λ Œλ”λŸ¬ 정보λ₯Ό ν†΅ν•œ 지속적인 λͺ¨λ‹ˆν„°λ§κ³Ό μ˜¬λ°”λ₯Έ λ©”λͺ¨λ¦¬ 관리 κΈ°λ²•μ˜ 적용이 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [2]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **GPU λ¦¬μ†ŒμŠ€μ˜ μˆ˜λ™ ν•΄μ œ:** Three.jsλŠ” GPU λ¦¬μ†ŒμŠ€λ₯Ό μžλ™μœΌλ‘œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, 더 이상 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μžμ›μ€ λ°˜λ“œμ‹œ κ°œλ°œμžκ°€ 직접 **`geometry.dispose()`, `material.dispose()`, `texture.dispose()`, `renderTarget.dispose()`**λ₯Ό ν˜ΈμΆœν•˜μ—¬ ν•΄μ œν•΄μ•Ό ν•©λ‹ˆλ‹€ [1-3]. * **GLTF ImageBitmap 특수 처리:** GLTF λͺ¨λΈμ—μ„œ 뢈러온 ν…μŠ€μ²˜λŠ” `ImageBitmap` 객체둜 λ‘œλ“œλ˜λ―€λ‘œ λˆ„μˆ˜λ₯Ό 막기 μœ„ν•œ 좔가적인 μ²˜λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€ [3]. μ΄λŸ¬ν•œ ν…μŠ€μ²˜λŠ” 일반적인 `dispose()` 외에도 λ°˜λ“œμ‹œ **`texture.source.data.close?.()`**λ₯Ό ν˜ΈμΆœν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ λ‹«μ•„μ£Όμ–΄μ•Ό ImageBitmap 객체의 λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό 막을 수 μžˆμŠ΅λ‹ˆλ‹€ [2, 3]. * **였브젝트 풀링(Object Pooling) λ„μž…:** λŸ°νƒ€μž„ 쀑 λΉˆλ²ˆν•˜κ²Œ μƒμ„±λ˜κ³  νŒŒκ΄΄λ˜λŠ” 였브젝트(예: μ΄μ•Œ, νŒŒν‹°ν΄, 적 λ“±)λŠ” λ©”λͺ¨λ¦¬ ν• λ‹Ή μ˜€λ²„ν—€λ“œμ™€ 이둜 μΈν•œ κ°€λΉ„μ§€ μ»¬λ ‰μ…˜ μ§€μ—°(GC pauses)을 μœ λ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€ [3]. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ μƒˆλ‘œμš΄ 객체λ₯Ό 맀번 ν• λ‹Ήν•˜λŠ” λŒ€μ‹  κΈ°μ‘΄ 객체λ₯Ό μž¬ν™œμš©ν•˜λŠ” **객체 풀링(Object Pooling)** νŒ¨ν„΄μ„ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€ [2, 3]. * **λ©”λͺ¨λ¦¬ λˆ„μˆ˜ λͺ¨λ‹ˆν„°λ§:** λŸ°νƒ€μž„μ— λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ λ°œμƒν•˜κ³  μžˆλŠ”μ§€ ν™•μΈν•˜λ €λ©΄ **`renderer.info.memory`** μ§€ν‘œλ₯Ό 주기적으둜 λͺ¨λ‹ˆν„°λ§ν•΄μ•Ό ν•©λ‹ˆλ‹€ [1, 2]. ν•΄λ‹Ή μ§€ν‘œμ—μ„œ μ§€μ˜€λ©”νŠΈλ¦¬μ™€ ν…μŠ€μ²˜μ˜ μΉ΄μš΄νŠΈκ°€ λ–¨μ–΄μ§€μ§€ μ•Šκ³  κ³„μ†ν•΄μ„œ μƒμŠΉν•˜κΈ°λ§Œ ν•œλ‹€λ©΄, λͺ…ν™•ν•œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ‘œ νŒλ‹¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 2]. * **에셋 슀트리밍(Asset Streaming) 및 λ©”λͺ¨λ¦¬ ν•œκ³„:** WebGL μ»¨ν…μŠ€νŠΈλŠ” μ œν•œλœ λ©”λͺ¨λ¦¬ μš©λŸ‰(톡상 256MB~1GB)을 μ§€λ‹ˆκ³  μžˆμ–΄ 이λ₯Ό μ΄ˆκ³Όν•˜λ©΄ λΈŒλΌμš°μ € ν¬λž˜μ‹œλ‚˜ 프리징이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€ [4]. λ¬΄ν•œν•œ 크기의 씬이라도 μΉ΄λ©”λΌμ—μ„œ 100 μœ λ‹› 이상 λ©€μ–΄μ§„ μžμ›λ“€μ— λŒ€ν•΄ `dispose()`λ₯Ό ν˜ΈμΆœν•΄ λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•˜λŠ” 슀트리밍 방식을 μ μš©ν•˜λ©΄, ν™œμ„±ν™”λœ λͺ¨λΈλ§Œ λ©”λͺ¨λ¦¬μ— μœ μ§€ν•˜μ—¬ λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 및 κ³ κ°ˆμ„ λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Garbage Collection|Garbage Collection]], [[Object Pooling|Object Pooling]], Dispose(), ImageBitmap - **Projects/Contexts:** Three.js Memory Management, Asset Streaming in WebGL - **Contradictions/Notes:** μ†ŒμŠ€ κ°„μ˜ λͺ¨μˆœμ μ€ λ°œκ²¬λ˜μ§€ μ•Šμ•˜μœΌλ©°, 제곡된 μ†ŒμŠ€λ“€μ€ λͺ¨λ‘ κ³΅ν†΅μ μœΌλ‘œ Three.js μ—”μ§„ ν™˜κ²½μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ 'μ‚¬μš©μ΄ λλ‚œ μžμ›μ˜ λͺ…μ‹œμ  ν•΄μ œ(dispose)'κ°€ μ ˆλŒ€μ μœΌλ‘œ ν•„μš”ν•¨μ„ κ°•μ‘°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Memory Leaks.md ---