---
id: P-REINFORCE-AUTO-6C336D
category: "[[10_Wiki/💡 Topics/Programming & Language]]"
confidence_score: 0.90
tags: [auto-reinforced]
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - Garbage Collection (GC) 최적화"
---

# [[Garbage Collection (GC) 최적화]]

## 📌 한 줄 통찰 (The Karpathy Summary)
> 지식 요약 정보 추출 중...

## 📖 구조화된 지식 (Synthesized Content)
**1. GC 스파이크와 프레임 드랍(Stop-the-world) 원인** 자바스크립트 엔진의 가비지 컬렉터(GC)는 자동 메모리 관리를 제공하지만, 실시간 상호작용이 필요한 게임이나 고성능 렌더링 환경에서는 불규칙한 'Stop-the-world(일시 정지)' 현상을 유발하는 주범이 됩니다. 짧은 시간 안에 수많은 객체를 무분별하게 생성하고 삭제하면, 힙 메모리가 파편화되고 가비지 컬렉터가 메모리를 정리하느라 시스템 자원을 소모하게 되어 화면이 뚝뚝 끊기는 지연(Lag)이나 프리징 현상이 발생합니다.

**2. 렌더링 루프(Render Loop) 내부의 객체 생성 금지** 애니메이션을 제어하는 `requestAnimationFrame`이나 React Three Fiber의 `useFrame` 같은 핵심 게임 루프 내부에서 새로운 객체(예: `new Vector3()`)를 반복적으로 생성하면 끊임없는 가비지 컬렉션이 트리거됩니다. 이를 방지하려면 루프 외부에서 미리 객체를 할당해 두거나(`useMemo` 등 활용), 객체의 속성값만 덮어씌워 갱신(Direct mutation)하는 방식으로 재사용해야 합니다.

**3. 오브젝트 풀링(Object Pooling)의 적극 도입** 탄환, 파티클, 적 캐릭터 등 생성과 파괴가 매우 빈번한 객체는 **오브젝트 풀(Object Pool)**이라는 고정된 크기의 배열을 만들어 최적화합니다. 로딩 시점에 필요한 객체를 미리 생성해 두고, 게임 중에는 삭제(Free)하지 않은 채 활성/비활성 상태만 변경하여 돌려 사용합니다. 이 방식을 사용하면 런타임 중의 메모리 할당 및 해제 횟수가 '0'에 가까워져 GC로 인한 성능 저하를 극적으로 막을 수 있습니다.

**4. 세대별 GC(Generational GC) 특성을 고려한 주의사항** 최신 브라우저(V8 엔진 등)는 **세대별 가비지 컬렉션(Generational GC)**을 사용하므로, 생성 후 금방 버려지는 단기 생존 객체(Short-lived garbage)는 사실상 거의 비용 없이 회수됩니다. 따라서 무분별하게 모든 객체를 풀링할 경우, 오히려 객체들이 메모리에 계속 상주하는 '장기 생존 객체'로 취급되어 구세대(Old generation) 메모리를 압박하고 GC 성능을 악화시킬 수 있습니다. 오브젝트 풀링은 반드시 프로파일링을 통해 객체 생성 비용이 진짜 병목으로 판명된 경우에만 선별적으로 도입해야 합니다.

## ⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.

## 🔗 지식 연결 (Graph)
- **Related Topics:** [[Object Pooling (오브젝트 풀링)]], [[Memory Leak Prevention (메모리 누수 방지)]], [[Generational GC (세대별 가비지 컬렉션)]], [[React Three Fiber (R3F) 자산 최적화]]
- **Projects/Contexts:** [[수만 개의 엔티티가 존재하는 실시간 물리 시뮬레이션]], [[대규모 파티클 시스템 최적화]]
- **Contradictions/Notes:** 가비지 컬렉션의 멈춤 현상을 극도로 피해야 하는 환경(예: AAA급 웹 게임)에서는 ECS(엔티티 컴포넌트 시스템)와 같이 자바스크립트 기본 객체가 아닌, 연속된 `TypedArray` 형태의 메모리 버퍼(SoA)를 직접 다루는 데이터 지향 설계(Data-Oriented Design)를 통해 GC 자체를 원천 우회하는 설계가 활용되기도 합니다.
- Raw Source: [[00_Raw/2026-04-20/Garbage Collection (GC) 최적화.md]]
---
