본문 바로가기
Java

[ Java ] JVM에서 가비지 컬렉션 수집 목표를 판단하는 기준은 무엇일까?

by YBin's 2025. 12. 22.

가비지 컬렉션(이하 GC)은 자바의 메모리 관리 방법 중 하나이며, JVM의 힙 영역에서 동적으로 할당된 메모리 중 필요 없어진 객체를 주기적으로 제거하기 위한 메커니즘이다.

자바에 대해서 공부를 시작하면, 가장 먼저 접하게 되는 GC!!

GC는 자바에서 메모리 관리를 효율적으로 하기 위한 기술로, 프로그램이 사용하지 않는 객체를 자동으로 수집하여 메모리를 확보하는 역할을 한다. 이는 개발자가 메모리 해제를 직접 관리하지 않아도 되는 큰 장점을 제공한다.. 즉, 자질구레한 것은 자바가 해주고, 개발자는 비즈니스 코드에만 집중할 수 있게 해준다.

 


JVM의 메모리 구조 이해하기

JVM의 메모리는 주로 세 부분으로 나뉘어 있다: 메서드 영역(Method Area), 스택 영역(Stack Area), 그리고 힙 영역(Heap Area), 메서드 영역은 메서드 정보를 저장하고, 스택 영역은 메서드 호출 시 로컬 변수를 저장하는 공간. 힙 영역은 객체가 생성되는 주된 공간으로, GC의 대상이 되는 객체들이 위치하고 있다.

메서드 영역 메서드 정보
스택 영역 메서드 호출 시, 로컬 변수
힙 영역 객체가 생성되는 주 공간 ( GC 대상들 )


도달 가능성(Reachability) 개념

GC는 객체가 사용 중인지 아닌지를 판단하기 위해 도달 가능성이라는 개념을 사용한다! 도달 가능성이란 특정 객체에 대한 참조가 존재하는지를 의미하며, 참조가 없다면 해당 객체는 도달할 수 없는 상태로 간주하고 GC의 대상이 된다.....!!!

 


루트 집합(Root Set)과 참조 케이스

힙 영역의 객체에 대한 참조는 네 가지 케이스로 나눌 수 있다.

 

1. 힙 내부 객체 간의 참조

2. 스택 영역 변수에 의한 참조

3. JNI에 의해 생성된 객체에 대한 참조

4. 메서드 영역의 정적 변수에 의한 참조

 

힙 내부 객체 간의 참조를 제외한 나머지를 루트 집합(Root Set)이라고 부른다!!

 


가비지 컬렉션 동작 원리 and 종류

GC의 동작 원리는 현재 힙 영역에 있는 객체들 중 루트 집합으로부터 도달할 수 없는 객체를 찾아내는 것. 이 과정은 Mark and Sweep 방식으로 진행되며, 루트로부터 도달 가능한 객체를 마크한 후, 마크되지 않은 객체를 수거하는 방식으로 이루어진디. 

 

가비지 컬렉션은 여러 종류가 있으며, 각각의 알고리즘이 존재한다! 대표적인 것들로는 Minor GC와 Major GC(=Full GC)가 있다. Minor GC는 Young Generation에서 발생하고, Major GC는 Old Generation에서 발생한다.



 


 

JVM에서의 메모리 관리 전략 방법


JVM은 효율적인 메모리 관리를 위해 다양한 전략을 사용하는데, 가장 잘 알려진건 메모리 영역을 Young Generation과 Old Generation으로 나누는 것이당. Young Generation은 다시 Eden Space와 두 개의 Survivor Space로 나뉘어져 있으며(위 그림의 S0,S1..), GC는 이들 각각의 공간에서 객체의 생애 주기를 관리한다..! 

즉 결론적으로는 도달 가능성이라는 개념을 중심으로, GC의 대상을 판단한다고 보면 된다.