5.0 KiB
id: P-Reinforce-AUTO-1E11F0 category: Unified confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - 힙 스냅샷 (Heap Snapshots)"
힙 스냅샷 (Heap Snapshots)
📌 한 줄 통찰 (The Karpathy Summary)
힙 스냅샷(Heap Snapshots)은 특정 시점에 애플리케이션의 자바스크립트 객체와 관련된 DOM 노드가 차지하는 메모리 분포 및 전체 객체 그래프를 캡처하여 보여주는 분석 도구입니다 [1, 2]. 이 도구는 메모리 그래프를 분석하거나 여러 스냅샷을 비교하여 메모리 누수를 찾아내고 객체 참조 트리를 확인하는 데 주로 사용됩니다 [2]. 힙 스냅샷을 생성하는 작업은 항상 가비지 컬렉션(Garbage Collection)과 함께 시작되며, 전역 객체(global object)에서 도달 가능한 객체들만을 화면에 표시합니다 [3].
📖 구조화된 지식 (Synthesized Content)
-
메모리 누수 탐지 기법 (3-스냅샷 기법): 가장 신뢰할 수 있는 메모리 누수 탐지 방법은 3개의 스냅샷을 사용하는 것입니다 [4]. 먼저 기준점이 되는 스냅샷 1을 찍은 후, 누수가 의심되는 작업(예: 모달 열기/닫기, 라우트 이동 등)을 수행하고 스냅샷 2를 찍습니다 [4]. 이후 동일한 작업을 반복한 뒤 스냅샷 3을 캡처합니다 [4]. 스냅샷 2와 3을 비교하여, 스냅샷 1과 2 사이에 할당되었으나 스냅샷 3에서도 여전히 가비지 컬렉션되지 않고 살아있는 객체들을 누수 후보로 특정할 수 있습니다 [4].
-
객체 식별 및 추적 메커니즘: 스냅샷 내의 객체들에는
@기호 뒤에 고유한 ID 번호가 부여됩니다 [5-7]. 가비지 컬렉션이 발생하면 메모리 상에서 객체의 주소가 이동할 수 있으므로 주소를 표시하는 것은 의미가 없으며, 대신 이 고유 ID를 통해 여러 스냅샷 간에 동일한 객체의 상태를 정밀하게 비교하고 추적할 수 있습니다 [5, 7]. -
주요 분석 뷰(Views): 힙 스냅샷은 분석 목적에 따라 다양한 시점을 제공합니다 [8].
- Summary (요약): 객체들을 생성자(Constructor) 이름과 소스별로 그룹화하여 보여줍니다 [8]. 각 객체에 대해 루트로부터의 거리(
Distance), 객체 자체가 차지하는 메모리 크기(Shallow size), 그리고 해당 객체를 삭제할 경우 확보할 수 있는 메모리 크기(Retained size)를 확인할 수 있습니다 [9]. - Comparison (비교): 두 개 이상의 스냅샷 간의 차이를 분석하며, 작업 전후의 메모리 델타(추가 및 삭제된 객체 인스턴스)를 검사하여 메모리 누수를 확인합니다 [8, 10].
- Containment (포함):
DOMWindow객체, 가비지 컬렉터가 사용하는[[GC Root|GC Root]]s, 브라우저의Native objects를 진입점으로 삼아 애플리케이션의 메모리 사용 구조를 거시적으로 보여주며 클로저 등을 로우 레벨에서 분석하게 돕습니다 [8, 11, 12].
- Summary (요약): 객체들을 생성자(Constructor) 이름과 소스별로 그룹화하여 보여줍니다 [8]. 각 객체에 대해 루트로부터의 거리(
-
Retainers (유지자) 분석: 힙 스냅샷 인터페이스 하단의 Retainers 패널은 선택된 특정 객체를 메모리에 유지시키고 있는 다른 객체들의 참조 체인을 가비지 컬렉션 루트에서부터 역순으로 보여줍니다 [1, 12, 13]. 이 참조 체인을 추적하면 객체가 왜 수집되지 않았는지 근본 원인을 찾아 코드를 수정할 수 있습니다 [1, 14].
⚠️ 모순 및 업데이트 (Contradictions & RL Update)
- 과거 데이터와의 충돌: 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- 정책 변화: Programming & Language 분야의 자동 자산화 수행.
🔗 지식 연결 (Graph)
- Related Topics: 가비지 컬렉션 (Garbage Collection), 메모리 누수 (Memory Leaks), Shallow Size, Retained Size, 할당 타임라인 (Allocation Timeline)
- Projects/Contexts: Chrome DevTools 메모리 패널, V8 자바스크립트 엔진
- Contradictions/Notes: 원시 힙 스냅샷에는 사용자의 애플리케이션 객체뿐만 아니라
(compiled code),(concatenated string),InternalNode등 수천 개의 V8 내부 항목들이 포함되어 있으므로, 생성자 필터를 통해 애플리케이션 객체에 초점을 맞춰야 합니다 [15-19]. 또한 메모리 그래프가 커진다고 해서 모두 누수인 것은 아니며(캐시 보존 등 의도적 보존일 수 있음), 네이티브 코드로 실행되는 getter가 구현된 프로퍼티나 숫자 같은 비문자열 값은 자바스크립트 힙에 저장되지 않아 스냅샷에 캡처되지 않는다는 점을 유의해야 합니다 [15, 20].
Last updated: 2026-04-19