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

정의
장단점
장점
메모리 관리를 자동화하여 프로그래머의 부담을 줄임
메모리 누수와 같은 심각한 오류를 방지할 수 있음
안정성과 신뢰성. 개발자가 코드 작성에 집중할 수 있게 해줌
단점
CPU 시간을 소모하므로 성능에 영향을 줌
가비지 컬렉션이 발생하면 프로그램이 일시 중단될 수 있음
실시간 시스템에서는 가비지 컬렉션을 사용하지 않을 수 있
원리
가비지 컬렉션은 크게 두 단계로 이루어집니다:
Mark
다양한 Root Space로부터 그래프 순회를 통해 연결된 객체들을 찾아내어 각각 어떤 객체를 참조하고 있는지 찾아 마킹
Sweep
참조하고 있지 않은 객체, 즉 Unreachable 객체들을 Heap에서 제거함Compact
Sweep 후 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축

Stop-The-World
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)
대용량 힙을 가진 시스템에서 장기 일시 중지를 최소화하는 데 초점을 맞춤.
동시성과 병렬성을 활용하여 일시 중지 시간을 줄임

