[CS/Java] Garbage Collection의 동작 원리

다은·2025년 11월 19일

CS

목록 보기
6/7
post-thumbnail

1. Garbage Collection


1. Garbage Collection?

Garbage Collection은 "JVM에서 자동으로 Heap 영역에 할당된 객체 중 사용하지 않는 객체를 탐지해 메모리를 해지하는 기법"입니다.

덕분에 개발자는 직접 메모리를 해제하지 않아도 되어 개발 편의성이 높아집니다.

그러나, 메모리가 언제 해제되는지 알지 못해 제어가 어렵습니다. 또한, GC가 수행될 때는 애플리케이션이 멈춰 오버헤드가 발생합니다.

이를 "Stop the world"라고 부르며, 이 시간을 최소화하는 것이 GC 알고리즘의 핵심 목표가 됩니다.


2. GC의 대상

GC는 참조하는 Reference가 없는 객체를 청소 대상으로 지정합니다.

따라서, 객체가 NULL이거나 블럭 실행 종료 후, 블럭 내에서 생성된 객체 등이 GC의 대상이 됩니다.


3. GC 과정

가장 기본적인 GC 과정입니다.

1. Mark

  • 모든 객체를 순회하며 Reference 존재 여부에 따라 Mark함
  • reachable / unreachable

2. Sweep

  • Heap에서 unreachable 객체들을 삭제함

3. Compacting

  • 분산된 객체들을 Heap 시작주소로 모아 압축함
  • 객체가 존재하는 공간과 존재하지 않는 공간으로 분리함



2. Generational Garbage Collection


1. Weak Hypothesis

  1. 대부분의 객체는 금방 unreachable 상태가 된다
  2. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재한다

Heap 영역은 위의 가설을 전제하고 설계되었습니다.

위의 가설에 따르면 대부분의 객체는 일회성이고 메모리에 오래 남는 경우가 적다는 것을 유추할 수 있습니다.

따라서 개발자들은 이 특성을 기반으로 더 효율적인 설계를 하기 위해, Heap 영역을 Old 영역과 Young 영역으로 구분했습니다.


2. Young Space

Eden 영역과 두 개의 Survivor 영역으로 구분된 Young Space는 새로운 객체가 할당되는 공간입니다.

대부분의 객체가 일회성이라는 가설에 알맞게, 대부분의 객체는 이 영역에서 할당되었다가 사라지며, Young Space에서 일어나는 GC는 Minor GC라고 칭합니다.

Eden

  • new를 통해 새롭게 생성된 객체가 할당됨
  • 공간이 가득 차면 살아남은 객체들을 survivor space로 보냄

Survivor Space

  • 최소 1회 이상 살아남은 객체들이 존재하는 공간
  • 둘 중 한 공간은 반드시 비어있어야 함

3. Old Space

Young Space에서 살아남은 객체가 복사되는 공간이며, Young Space보다 더 큰 공간이 할당됩니다.

Young Space보다 GC가 적게 발생하며, 이를 Major GC라고 칭합니다.


4. Permanent

ClassLoader에 의해 load되는 class나 method의 meta data를 포함하는 공간입니다.

Java7까지는 Heap에 존재했으며 Java8부터는 Method Stack으로 편입되었습니다.



3. Generational Garbage Collection 과정

1. Minor GC

  1. 새롭게 생성된 객체는 Eden 영역에 할당됨
  2. 객체가 계속 생성되어 Eden 영역이 꽉 차면 Minor GC가 발생함
  3. Eden 영역을 탐색해 Mark를 수행함
  4. reachable 객체들은 S0으로 이동시키고 unreachable 객체들은 Eden 영역이 clear될 때 해제됨
  5. 살아남은 객체들의 age를 1 증가시킴
  6. 또 다시 Eden 영역이 꽉 차면 Minor GC가 발생함
  7. Mark 수행함
  8. Eden 영역의 reachable 객체들과 S0의 reachable 객체들을 S1로 이동시킴
  9. 살아남은 객체들의 age를 1 증가시킴
  1. 이러한 과정을 반복함

2. Major GC

  1. age가 임계치에 도달하면 old space로 이동시킴 == promotion

  2. minor GC가 반복해서 일어나 old space가 꽉 차면 Major GC가 발생함



이 때, Major GC는 Minor GC보다 실행시간이 배로 느리므로, stop the world 오버헤드가 발생합니다.

이러한 관점에서, 성능 개선을 위한 Major GC Algorithm에도 여러 종류가 존재합니다.

profile
CS 마스터를 향해 ..

0개의 댓글