About Garbage Collection (가비지 컬렉션)

SUUUI·2025년 3월 28일

java

목록 보기
5/16

가비지 컬렉션 이란? Garbage Collection

: 사용하지 않는 객체들을 메모리 공간 (heap) 에서 정리해주는 시스템이며
메모리 누수를 방지해준다 .
Generational Collection (세대별 수집) - 힙을 세대 별로 나누어 관리한다.
(Minor GC / Major GC)
가비지 컬렉션은 "Mark and Sweep" 알고리즘을 기반으로 동작하게 된다.

Mark-and-Sweep 알고리즘

대부분의 JVM 가비지 컬렉터는 기본적으로 "Mark-and-Sweep" 알고리즘을 기반으로 움직인다:

▶️Mark(표시) 단계:

GC는 "루트 셋(Root Set)" 에서 시작. 루트 셋은 스택의 지역 변수, 정적 변수, JNI 참조 등을 포함.
이 루트에서부터 모든 객체 참조를 따라가며 도달 가능한 객체들을 "살아있음"으로 표시
(변수 - 스택 / 값 - 힙 )

▶️Sweep(제거) 단계:

표시되지 않은 객체들(도달할 수 없는 객체들)은 메모리에서 제거됨

Generational Collection (세대별 수집)

JVM은 "객체는 대부분 짧은 시간 내에 가비지가 된다"는 가설에 기반하여 힙을 세대(Generation)로 나눈다 (갓 생성된 객체 / 오래된 객체 ):

▶️Young Generation (Minor GC):

Eden Space에서 객체 생성
Eden Space가 꽉 차면 Minor GC 발생
살아남은 객체는 Survivor Space로 이동
여러 Minor GC를 거친 객체들은 "age" 값이 증가
특정 age 임계값에 도달한 객체는 Old Generation으로 승격

▶️Old Generation (Major GC):

Young Generation에서 오래 살아남은 객체들이 이동
Old Generation이 꽉 차면 Major GC(Full GC) 발생
Major GC는 더 복잡하고 시간이 많이 소요됨

profile
간단한 개발 기록

0개의 댓글