728x90

1.heap dump 란?
특정 시점에 실행 중인 애플리케이션의 힙(Heap) 메모리 상태를 그대로 복사하여 저장한 스냅샷(Snapshot) 파일을 의미한다.
주로 OOM같은 메모리 오류같은 부분들을 추하기 위해 사용한다.
2.heap dump 생성법
2-1.OOM 발생 시 자동 생성
OutOfMemoryError(OOM)로 죽는 순간의 정확한 상태를 잡기 위해 애플리케이션 실행 시 JVM 옵션에 추가할수있다.
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/경로/원하는파일명.hprof
2-2. 수동으로 생성
메모리 사용량이 비정상적으로 치솟거나 서버가 느려졌을 때 터미널에서 명령어를 입력해 직접 heap dump를 생성해볼수도있다.
jcmd <PID> GC.heap_dump /경로/원하는파일명.hprof
3.heap dump
3-1. Eclipse MAT
무료인 분석 도구로 덤프 파일 분석에 주로 사용한다.
그 외에는 IDE에서 제공해주는 분석도구들을 사용할수도있다.

Memory Analyzer (MAT) | The Eclipse Foundation
The Eclipse Foundation provides our global community of individuals and organizations with a mature, scalable, and business-friendly environment for open source …
eclipse.dev
4. 관련용어
4-1 .Shallow Heap
해당 객체 자체가 차지하는 메모리 크기이다.
객체의 필드 값이나 헤더 정보만 포함합니다.원시 타입(int, boolean 등)의 크기와 다른 객체를 가리키는 레퍼런스 포인터 크기만 해당된다.
대부분 작은값이다.
4-2.Retained Heap
특정 객체가 가비지 컬렉션(GC)될 때 함께 메모리에서 해제되는 모든 하위 참조 객체들의 메모리 크기 합이다.
예를 들어 객체 A가 객체 B, C를 참조하고 있고, 객 B와 C는 오직 A에 의해서만 참조되고 있다면, A의 Retained Heap은 A + B + C의 크기가 된다.
OOM(Out of Memory)이나 메모리 누수의 원인을 찾으려면 이 Retained Heap 크기를 잘 봐야한다.
(비정상적으로 크다면, 해당 객체가 수많은 다른 객체들을 참조하며 메모리를 붙잡고 있다는 뜻)
728x90
'Language > JAVA' 카테고리의 다른 글
| [JAVA] Reflection API (1) | 2025.09.01 |
|---|---|
| [Java] 람다 (0) | 2024.12.03 |
| [Java] 범용프로그래밍 (0) | 2024.12.03 |