카테고리 없음

JVM(Java Virtual Machine) 힙(heap)과 가비지 컬렉션(Garbage Collection) 250515

mezzanineX 2025. 5. 15. 15:35

q1: JVM(Java Virtual Machine) 힙(heap)과 가비지 컬렉션(Garbage Collection)

a1:

JVM(Java Virtual Machine)은 자바 바이트코드를 실행하기 위한 가상 머신으로, 내부적으로 여러 메모리 영역을 관리합니다. 그중 힙(heap) 과 가비지 컬렉션(Garbage Collection)자바 메모리 관리의 핵심 개념입니다.



1. JVM 힙(heap)이란?
1. 역할
자바 애플리케이션이 실행되는 동안 생성되는 모든 객체(Object)와 배열(Array)이 저장되는 공간입니다.
동적으로 할당되는 메모리 영역으로, new 키워드를 통해 객체를 생성하면 이 힙 영역에 저장됩니다.
2. 구조
JVM 힙은 크게 두 영역으로 나뉩니다.
Young Generation (신생 영역)
새롭게 생성된 객체들이 먼저 위치합니다.
다시 Eden 영역과 두 개의 Survivor 영역(S0, S1) 으로 구분됩니다.
Old Generation (노년 영역, Tenured 영역)
Young Generation을 여러 번 거쳐 생존한(즉, 오래 살아남은) 객체들이 이곳으로 이동합니다.



3. 튜닝 포인트
-Xms (초기 힙 크기) & -Xmx (최대 힙 크기) 옵션으로 전체 힙 크기를 조정할 수 있습니다.
Young/Old Generation 비율(-XX:NewRatio), Survivor 영역 크기(-XX:SurvivorRatio) 등을 통해 세부 구조를 최적화할 수 있습니다.



2. 가비지 컬렉션(Garbage Collection)이란?
1. 정의
애플리케이션에서 더는 참조되지 않는(사용되지 않는) 객체를 힙에서 자동으로 찾아 제거하고, 그 메모리를 회수하여 재사용 가능한 상태로 만드는 과정입니다.
2. 작동 원리(대표 알고리즘)
1. Mark-and-Sweep (표시-정리)
Mark 단계: 루트(Root) 참조(스택 변수, 정적 변수 등)로부터 도달 가능한 객체를 “사용 중”으로 표시.
Sweep 단계: 표시되지 않은(도달 불가능한) 객체를 힙에서 제거.
2. Copying (복사)
Young Generation에서 주로 사용.
살아있는 객체만을 다른 공간으로 복사한 뒤, 이전 공간을 한꺼번에 비움.
3. Generational GC (세대별 수집)
객체의 생존 기간 특성을 이용해 Young/Old로 구분해 수집 횟수와 비용을 최적화.
3. 가비지 컬렉션 종류
Minor GC
Young Generation만을 대상으로 수행. Eden과 Survivor 사이에서 살아남은 객체들을 복사하고 불필요 객체를 정리합니다.
Major GC (혹은 Full GC)
Old Generation 전체(Young + Old)를 대상으로 실행되어, 애플리케이션 일시 중단(pause)이 비교적 깁니다.
4. 주요 GC 구현체 (HotSpot 기준)

Serial GC: 단일 스레드로 동작, 작은 애플리케이션에 적합
Parallel GC (Throughput): 멀티 스레드로 Young/Old 정리, 처리량 우선
CMS (Concurrent Mark–Sweep): Old Generation에서 동시 처리, 일시 중단 시간 최소화
G1 (Garbage-First): 힙을 여러 Region으로 분할, 예측 가능한 일시 중단 시간 제공

실행 옵션 예시

-XX:+UseG1GC            # G1 GC 사용
-XX:MaxGCPauseMillis=200 # 최대 일시 중단 시간 목표



3. 요약
JVM 힙(heap)
: 객체와 배열이 동적으로 할당되는 메모리 공간. Young/Old Generation으로 구분되어 성능 최적화를 돕습니다.
가비지 컬렉션(GC)
: 더 이상 사용되지 않는 객체를 찾아 제거하고 메모리를 회수하는 자동화된 메모리 관리 기법. 다양한 알고리즘과 구현체가 있어 애플리케이션 특성에 맞춰 선택·튜닝할 수 있습니다.

반응형