GC 종류와 특징

carlkim·2024년 1월 16일
0

WAS

목록 보기
8/12

가비지 컬렉션 확인 명령어

java -XX:+PrintCommandLineFlags -version

G1 을 사용하는 것을 알 수 있다.

자바 9 이후 Parallel -> G1 으로 변경

Java 8 이전:

Java 8 이전에는 주로 Parallel GC가 기본으로 사용되었습니다.

Parallel GC는 다수의 쓰레드를 사용하여 가비지 컬렉션을 병렬로 처리하고, 주로 대규모 멀티코어 시스템에서의 성능을 향상시키는 데 중점을 두고 있었습니다.

Java 9 이후:

Java 9에서는 G1 GC(Garbage First)가 기본 가비지 컬렉션 알고리즘으로 도입되었습니다.

G1 GC는 힙을 작은 영역으로 나누고 각 영역에 대해 별도의 가비지 컬렉션을 수행하여 대규모 힙에서도 예측 가능하고 일관된 응답 시간을 제공하도록 설계되었습니다.

1. Serial GC:

특징:
단일 쓰레드로 동작하는 간단한 알고리즘입니다.
작은 힙 크기에서 성능이 좋으며, 메모리 사용량이 적은 환경에 적합합니다.

Serial GC 적용하는 명령어

java -XX:+UseSerialGC -jar Application.java

주로 단일 프로세서 머신이나 작은 규모의 애플리케이션에서 사용됩니다.

Serial GC는 서버의 CPU 코어가 1개일 때 사용하기 위해 개발되었으며, 모든 가비지 컬렉션 일을 처리하기 위해 1개의 쓰레드만을 이용한다. 그렇기 때문에 CPU의 코어가 여러 개인 운영 서버에서 Serial GC를 사용하는 것은 반드시 피해야 한다.

Parallel GC (또는 throughput GC):

Parallel GC 적용 명령어

java -XX:+UseParallelGC -jar Application.java

// 사용할 쓰레드의 갯수
-XX:ParallelGCThreads=<N>

// 최대 지연 시간
-XX:MaxGCPauseMillis=<N>

특징:
Parallel GC는 Throughput GC로도 알려져 있으며, 기본적인 처리 과정은 Serial GC와 동일하다.

하지만 Parallel GC는 여러 개의 쓰레드를 통해 Parallel하게 GC를 수행함으로써 GC의 오버헤드를 상당히 줄여준다. Parallel GC는 멀티 프로세서 또는 멀티 쓰레드 머신에서 중간 규모부터 대규모의 데이터를 처리하는 애플리케이션을 위해 고안되었으며, 옵션을 통해 애플리케이션의 최대 지연 시간 또는 GC를 수행할 쓰레드의 갯수 등을 설정해줄 수 있다.

Parallel GC가 GC의 오버헤드를 상당히 줄여주었고, Java8까지 기본 가비지 컬렉터(Default Garbage Collector)로 사용되었다. 그럼에도 불구하고 Application이 멈추는 것은 피할 수 없었고, 이러한 부분을 개선하기 위해 다른 알고리즘이 더 등장하게 되었다.

Concurrent Mark-Sweep (CMS) GC:

CMS 알고리즘 적용 명령어

// deprecated in java9 and finally dropped in java14
java -XX:+UseConcMarkSweepGC -jar Application.java

CMS(Concurrent Mark Sweep) GC는 Parallel GC와 마찬가지로 여러 개의 쓰레드를 이용한다. 하지만 기존의 Serial GC나 Parallel GC와는 다르게 Mark Sweep 알고리즘을 Concurrent하게 수행하게 된다.

특징:
메모리 중단 시간을 최소화하기 위해 고안된 알고리즘으로, 주로 대규모 메모리 시스템에서 사용됩니다.
가비지 컬렉션 단계 중에 일부는 쓰레드 중단 없이 수행되므로 응답 시간이 개선됩니다.
하지만 큰 힙이나 코어가 많은 시스템에서는 일부 성능 이슈가 발생할 수 있습니다.

G1 (Garbage First) GC:

G1GC 적용 명령어

java -XX:+UseG1GC -jar Application.java

특징:
힙을 작은 영역으로 나누고 각 영역에 대해 별도의 가비지 컬렉션을 수행합니다.
대규모 힙에서도 일관된 응답 시간을 제공하고 중단 시간을 최소화합니다.
CMS의 일부 문제를 해결하면서 대용량 힙에서의 효과적인 관리를 지향합니다.

Z Garbage Collector:

특징:
G1 GC를 기반으로 개발되었으며, 중단 시간을 더 최적화하는데 중점을 둡니다.
G1과 유사한 구조를 가지며, 대량의 힙에서도 일관된 성능을 제공하려고 합니다.
주로 JDK 11부터 기본 GC로 사용되기 시작했습니다.

profile
가장 나답게 문제해결.

0개의 댓글