Skip to main content

Command Palette

Search for a command to run...

Garbage Collector

가비지 컬렉터에 대해 알아보자

Updated
2 min read
Garbage Collector
O

SW엔지니어 호소인

정의

💡
자바 가상 머신(JVM)에서 메모리 관리를 담당하는 시스템입니다. 힙 영역에서 사용하지 않는 객체들을 찾아서 자동으로 삭제합니다. 프로그래머는 메모리 할당과 해제에 신경 쓰지 않아도 됩니다. 다양한 알고리즘과 전략을 사용하여 JVM의 성능을 향상시킬 수 있습니다.

장단점

장점

  • 메모리 관리를 자동화하여 프로그래머의 부담을 줄임

  • 메모리 누수와 같은 심각한 오류를 방지할 수 있음

  • 안정성과 신뢰성. 개발자가 코드 작성에 집중할 수 있게 해줌

단점

  • CPU 시간을 소모하므로 성능에 영향을 줌

  • 가비지 컬렉션이 발생하면 프로그램이 일시 중단될 수 있음

  • 실시간 시스템에서는 가비지 컬렉션을 사용하지 않을 수 있

원리

가비지 컬렉션은 크게 두 단계로 이루어집니다:

  1. Mark

    다양한 Root Space로부터 그래프 순회를 통해 연결된 객체들을 찾아내어 각각 어떤 객체를 참조하고 있는지 찾아 마킹

  2. Sweep
    참조하고 있지 않은 객체, 즉 Unreachable 객체들을 Heap에서 제거함

  3. Compact
    Sweep 후 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축

Stop-The-World

💡
가비지 컬렉션을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것
  • STW 발생하면 gc 를 실행하는 쓰레드를 제외한 나머지 스레드는 모두 작업을 멈춥

  • GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작함

  • 메모리 누수를 방지하고 자원을 안전하게 환원할 수 있음

GC 종류

Serial GC

  • 클라이언트 스타일 애플리케이션에 추천됨

  • 낮은 일시 중지 시간 요구 사항이 없음

  • 단일 스레드에서 실행됨

  • 작은 힙 크기와 CPU 수를 가진 시스템에 적합함

Parallel GC

  • 이 GC는 처리량이 중요할 때 사용됨

  • 여러 스레드를 사용하여 GC 작업을 병렬로 수행

  • 대량의 데이터를 처리하는 서버 애플리케이션에 적합함

Concurrent Mark-Sweep (CMS) GC

  • 대기 시간이 중요할 때 사용됨

  • 애플리케이션의 실행을 최소한으로 중단하면서도 메모리를 효과적으로 관리함

  • CPU 리소스를 많이 사용하며, 메모리 단편화 문제가 발생할 수 있음

Garbage-First (G1) Garbage Collector

  • 대용량 힙을 가진 시스템에서 장기 일시 중지를 최소화하는 데 초점을 맞춤

  • 힙을 여러 영역으로 나누고, 각 영역을 독립적으로 관리하여 메모리 단편화를 줄임

Z Garbage Collector (ZGC)

  • 대용량 힙을 가진 시스템에서 장기 일시 중지를 최소화하는 데 초점을 맞춤.

  • 동시성과 병렬성을 활용하여 일시 중지 시간을 줄임

Garbage Collector