☕ JVM GC 및 메모리 구조 정리

김정규·2025년 6월 19일

✅ JVM 메모리 영역 개요

JVM은 실행 중인 Java 애플리케이션의 메모리를 아래와 같이 구분해 관리함:

  • Heap 영역: 객체가 저장되는 공간 (GC의 주요 대상)

    • Young Generation (Eden, Survivor)
    • Old Generation (Tenured)
  • Method Area (PermGen / Metaspace): 클래스 정보, 메서드 정보

  • Stack: 각 쓰레드마다 생성되는 프레임 기반 메모리 (지역 변수 저장)

  • PC Register, Native Stack 등: 기타 JVM 내부 운영용


📦 Young Generation 구조 (객체 생명주기 중심)

1. Eden 영역

  • new 연산자로 생성된 객체가 처음 저장되는 곳
  • 가장 많은 객체가 여기서 생성되고, 대부분 GC 대상됨

2. Survivor 영역 (S0 / S1)

  • Eden에서 Minor GC로 살아남은 객체가 잠깐 머무는 곳
  • S0, S1 두 개가 있고, 번갈아가며 복사/교환
  • 여러 번 Minor GC에서 살아남으면 Old로 승격

3. Old 영역 (Tenured)

  • 장기간 살아남은 객체가 이동하는 공간
  • 공간이 부족하면 Major GC(또는 Full GC) 발생
  • GC 성능과 STW(Stop The World) 현상에 큰 영향

🔁 GC 동작 방식 요약

구분트리거 조건대상 영역특징
Minor GCEden 가득 참Young Gen (Eden + Survivor)빠르고 자주 발생함
Major GCOld 영역 가득 참Old Gen느리고 STW 발생 가능성 높음
Full GC전체 Heap 점검 필요 시전체 Heap (Young + Old)성능에 가장 큰 영향

💡 객체 생명 흐름 정리 (직관적 설명)

[Eden] → [Survivor S0] → [Survivor S1] → [Old]
 (갓 생성됨)     (1번 생존)       (2~3번 생존)    (오래 살아남음)
  • Eden: 메서드 호출로 생성된 객체가 저장됨
  • Survivor: 살아남은 객체가 Old로 갈지 대기하는 중간 단계
  • Old: 여러 번 살아남은 객체를 위한 장기 저장 공간

🔚 면접용 정리 멘트

“JVM은 새로 생성된 객체를 Eden에 저장하고, GC에서 살아남으면 Survivor → Old 순으로 이동시킵니다.
객체 생존 시간에 따라 영역을 분리해서, GC 비용을 최소화하려는 구조입니다.”

“Minor GC는 Eden이 가득 찼을 때 발생하고 빠르며, Major GC는 Old 영역이 가득 찰 때 발생해 상대적으로 느리고 Stop-The-World를 유발할 수 있습니다.”

profile
기획과 설계 그리고 구현까지 하는 개발자가 되고 싶습니다

0개의 댓글