가비지 컬렉션 알고리즘 종류
JVM이 메모리를 자동으로 관리해주는 것은 개발자의 입장에서 굉장히 유용하다. 그러나 GC를 수행하기 위해 Stop-The-World가 발생하고 이 때문에 애플리케이션이 중지되는 문제점이 발생하기도 한다. 자바가 발전됨에 따라 힙 영역의 사이즈가 커지면서 애플리케이션의 지연 현상이 두드러지게 되었고, 이를 최적화하기 위해 다양한 가비지 컬렉션 알고리즘이 개발되었다.
1) Serial GC
서버의 CPU 코어가 1개일 때 사용하기 위해 개발된 가장 단순한 GC이다. GC를 처리하는 스레드가 1개라 Stop-The-World 시간이 길다. 보통 실무에서는 사용하지 않는다고 한다.

2) Parallel GC
Java8의 디폴트 GC이며, Serial GC와 기본적인 알고리즘은 같지만, Young 영역의 Minor GC를 멀티 스레드로 수행한다. Serial GC에 비해서는 Stop-The-World 시간이 감소한다.
3) Parallel Old GC (Parallel Compacting Collector)
Parallel GC를 개선한 버전으로 Young 영역 뿐만 아니라, Old 영역에서도 멀티 스레드로 GC 수행이 가능하다. 새로운 가비지 컬렉션 청소 방식인 Mark-Summary-Compact 방식을 이용한다.
4) CMS GC (Concurrnet Mark Sweep)
어팰리케이션의 스레드와 GC 스레드가 동시에 실행되어 Stop-The-World 시간을 최대한 줄이기 위해 고안된 GC이다. GC 대상을 파악하는 과정이 복잡한 여러 단계로 수행되기 때문에 다른 GC 대비 CPU 사용량이 높다. GC 과정이 매우 복잡해지며, 메모리 파편화의 문제가 존재한다. Java9 버전부터 deprecated 되었고 결국 Java14에서는 사용이 중지되었다.
5) G1 GC (Garbage First)
CMS GC를 대체하기 위해 JDK7 버전에서 최초로 release된 GC이다. Java9+ 버전의 디폴트 GC이며, 4GB 이상의 힙 메모리, Stop-The-World 시간이 0.5초 정도 필요한 상황에 사용한다. 기존의 GC 알고리즘에서는 힙 영역을 물리적으로 고정된 Young/Old 영역으로 나누어 사용하였지만, G1 GC는 아예 이러한 개념을 뒤엎는 Region 이라는 개념을 도입해서 사용한다.
이는 힙 영역을 Region이라는 영역으로 체스같이 분할하여 상황에 따라 Eden, Survivor, Old 등 역할을 고정이 아닌 동적으로 부여하는 것이다. Garbage로 가득찬 영역을 빠르게 회수하여 빈 공간을 확보하므로, 결국 GC 빈도가 줄어드는 효과를 얻게 되는 원리이다.
6) Shenandoah GC
Java12에서 release되었고, 기존 CMS가 가진 단편화, G1이 가진 pause 이슈를 해결한다. 강력한 Concurrency와 가벼운 GC 로직으로 힙 사이즈에 영향을 받지 않고 일정한 pause 시간이 소요되는 것이 특징이다.
7) ZGC (Z Garbage Collector)
Java15에 release되었고, 대량의 메모리를 low-latency로 잘 처리하기 위해 디자인 된 GC이다. G1의 Region 처럼, ZGC는 ZPage라는 영역을 사용하여 G1의 Region은 크기가 고정인데 비해, ZPage는 2MB 배수로 동적으로 운영된다. ZGC가 내세우는 최대 장점 중 하나는 힙 크기가 증가하더라도 Stop-The-World의 시간이 절대 10ms를 넘지 않는다는 것이다.
'Java' 카테고리의 다른 글
| [Java] JVM GC 작동 원리 (0) | 2025.11.10 |
|---|---|
| [Java] JVM(자바 가상 머신)에 대한 모든 것 (0) | 2025.11.10 |
| [Java] 자바 변수 4가지 정리 (전역, 지역, 정적, 멤버 변수) (0) | 2025.11.10 |
| [Java] 원시타입(Primitive Type)과 참조타입(Reference Type) (0) | 2025.10.14 |
| [Java] 스트림(Stream)에 대하여 (0) | 2025.10.14 |
