티스토리 뷰
JVM은 프로그램 실행 시 여러 종류의 메모리 영역을 사용하며, 각 영역은 역할과 저장하는 데이터가 다르다. JVM 메모리 구조에 대해 기억이 나지 않아 다시 한번 정리해봤다.

1. Heap

Heap은 애플리케이션에서 생성되는 모든 객체의 인스턴스가 저장되는 공간이다.
GC의 대상이 되며 다음과 같이 구분된다.
- Young Generation
- Eden: 새로 생성된 객체가 먼저 저장되는 공간
- Survivor: Minor GC 후 살아남은 객체가 임시로 저장되는 공간이다. Survivor에서 일정 횟수 이상(보통 15회) Minor GC를 버틴 객체는 Old Generation으로 이동한다.
- Old Generation
- Young Generation에서 오래 살아남은 객체가 저장되는 공간
- Major GC의 대상이 되며, Major GC가 발생할 때 Young Generation도 함께 GC되는 것을 Full GC라고 부릅니다. Full GC는 Metaspace까지 포함될 수 있으며, Minor GC보다 훨씬 오래 걸린다.
Minor GC : Young Generation 대상으로 하는 GC
Major GC : Old Generation 대상으로 하는 GC
Full GC : Young + Old Generation + Metaspace 대상으로 하는 GC
2. Stack

스택은 스레드마다 독립적으로 생성되는 메모리 영역이다. 메서드가 호출될 때마다 스택 프레임(Stack Frame)이 생성되어 해당 스레드의 스택에 쌓이게 된다.
- 스택 프레임 구성 요소
- 로컬 변수
- 매개 변수
- 메서드 호출/리턴 주소
- 중간 연산 값
중요: 스택 프레임에는 객체에 대한 참조 변수가 저장될 뿐, 객체 인스턴스 자체는 힙에 저장됩니다.
코드 예시
public void mainMethod() {
methodA(5);
}
public void methodA(int x) {
methodB(x * 2);
}
public void methodB(int y) {
System.out.println(y);
}
위 코드를 실행하면 mainMethod -> method A -> method B 순서대로 스택에 쌓이게 된다. 각 스택 프레임은 해당 메서드를 호출한 위치를 저장하고 있으며 메서드 종료시 호출한 지점으로 돌아가게 된다.
mainMethod프레임 생성methodA호출 시methodA프레임 pushmethodB호출 시methodB프레임 pushmethodB종료 시 pop →methodA로 복귀methodA종료 시 pop →mainMethod로 복귀
3. Method Area

Method Area는 클래스 로딩 시 클래스에 대한 메타 데이터를 저장하는 공간이다. Method Area는 JVM 명세에 정의된 설계적인 의미이고 실제 Method Area를 구현한 구체 메모리 공간이 Metaspace이다. Java 8 이전에는 PermGen(Permanent Generation)이라고 했으며, 이때는 Heap의 일부 영역이었으나 JDK 8 부터 Metaspace로 변경된 이후 Native Memory(OS의 메모리)를 사용한다.
- 저장 정보
- 클래스 정보(필드, 메서드, 접근제어자)
- 상수
- 정적 변수(static 변수)
- GC의 대상이 될 수 있으며, 사용하지 않는 클래스 정보는 제거된다.
참고 : GC 시뮬레이터
https://wdebowicz87.github.io/garbage-collector-game/public/index.html
'언어 > Java' 카테고리의 다른 글
| Record 살펴보기 (0) | 2025.09.14 |
|---|---|
| Optional 바르게 사용하기 (0) | 2025.08.26 |
| Java 버전 별 변화 변천사 (0) | 2025.08.03 |
| String, StringBuilder, StringBuffer 성능 차이 (0) | 2025.05.13 |
| Jackson의 @JsonProperty로 JSON 키와 Java 필드 매핑하기 (0) | 2025.04.09 |
