Java Academy · 강의

GC 알고리즘: Serial, G1, ZGC, Shenandoah

최신 JVM 수집기별 GC 일시 중지 특성과 처리량 간의 상충 관계를 비교합니다.

레슨 2/413개 단계

GC 알고리즘: Serial, G1, ZGC, Shenandoah은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

가비지 컬렉션 알고리즘 선택

JVM은 여러 가비지 컬렉션 알고리즘을 제공하며, 각 알고리즘은 서로 다른 작업 부하에 맞게 최적화되어 있습니다. 적절한 알고리즘을 선택하려면 힙 크기, 지연 시간 요구 사항, 처리량 목표를 고려해야 합니다.

// Enable GC algorithms:
// -XX:+UseSerialGC
// -XX:+UseParallelGC
// -XX:+UseG1GC       (default since Java 9)
// -XX:+UseZGC        (Java 15+ production)
// -XX:+UseShenandoahGC (Red Hat / OpenJDK builds)

직렬 가비지 컬렉터

직렬 가비지 컬렉터는 수집에 단일 스레드를 사용합니다. 가비지 컬렉션 중에는 모든 애플리케이션 스레드가 중지됩니다. 작은 힙이나 임베디드 시스템처럼 CPU가 하나뿐인 환경에만 적합합니다.

// Use:
// java -XX:+UseSerialGC -Xmx256m MyApp
// Pauses: long (proportional to heap size)
// Throughput: low
// Best for: CLI tools, small heaps < 100 MB

병렬 가비지 컬렉터(처리량 중심 수집기)

병렬 가비지 컬렉터는 마이너 및 주요 가비지 컬렉션에 여러 스레드를 사용합니다. 세상 멈춤 일시 중지는 직렬 가비지 컬렉터보다 짧지만 여전히 상당합니다. 지연 시간보다 처리량이 중요한 일괄 처리에 가장 적합합니다.

// Use:
// java -XX:+UseParallelGC -XX:ParallelGCThreads=8 MyApp
// Pauses: moderate
// Throughput: high
// Best for: batch jobs, number crunching

G1 가비지 컬렉터(가비지 우선)

G1은 힙을 같은 크기의 영역(약 2 KB~32 MB)으로 나눕니다. 가장 많은 가비지가 있는 영역부터 수집하여 설정 가능한 일시 중지 목표를 충족합니다. Java 9부터 기본 가비지 컬렉터입니다.

// Use:
// java -XX:+UseG1GC -XX:MaxGCPauseMillis=200 MyApp
// Pauses: bounded by target (but not guaranteed)
// Throughput: good
// Best for: large heaps (4 GB+), mixed workloads

G1 영역 유형

G1 영역은 영 세대, 생존자, 구세대 또는 초대형 객체용 영역(영역 크기의 50%를 초과하는 객체)으로 동적으로 지정됩니다. 이러한 유연성 덕분에 점진적인 수집이 가능합니다.

ZGC(Z 가비지 컬렉터)

ZGC는 대부분의 작업을 애플리케이션과 동시에 수행합니다. 힙 크기와 관계없이 일시 중지 시간은 일반적으로 1ms 미만입니다. Java 15부터 운영 환경에서 사용할 수 있습니다.

// Use:
// java -XX:+UseZGC -Xmx16g MyApp
// Pauses: < 1 ms (usually)
// Throughput: slightly lower than G1 (concurrent work has CPU cost)
// Best for: large heaps, low-latency services (APIs, trading)

Shenandoah 가비지 컬렉터

Shenandoah(Red Hat)도 동시 압축을 통해 1밀리초 미만의 일시 중지 시간을 달성합니다. OpenJDK 빌드에서 사용할 수 있습니다. 목표는 ZGC와 매우 비슷하지만 내부 알고리즘은 다릅니다.

// Use:
// java -XX:+UseShenandoahGC MyApp
// Available in: Red Hat builds, some AdoptOpenJDK distributions
// Pauses: sub-millisecond
// Best for: latency-sensitive workloads

세대별 ZGC(Java 21 이상)

Java 21에서는 ZGC의 짧은 일시 중지 방식에 세대별 수집을 결합한 세대별 ZGC가 도입되었습니다. 일시 중지 시간을 최소로 유지하면서 CPU 오버헤드를 줄입니다.

// Enable in Java 21+:
// java -XX:+UseZGC -XX:+ZGenerational -Xmx8g MyApp

가비지 컬렉션 일시 중지 시간과 처리량의 절충

모든 면에서 가장 뛰어난 가비지 컬렉션 알고리즘은 없습니다. 병렬 가비지 컬렉터는 처리량을 극대화합니다. G1은 처리량과 지연 시간 사이의 균형을 맞춥니다. ZGC와 Shenandoah는 처리량을 조금 희생하여 일시 중지 시간을 최소화합니다.

가비지 컬렉션 로그 기록 활성화

-Xlog:gc*:file=gc.log:time,uptime,level로 가비지 컬렉션 이벤트를 기록하십시오. GCViewer나 GCEasy 같은 도구로 로그를 분석하여 긴 일시 중지와 할당 급증을 찾을 수 있습니다.

// JVM flags:
// -Xlog:gc*:file=gc.log:time,uptime,level,tags
// Inspect logs:
// cat gc.log | grep "Pause"

JVM 메트릭으로 가비지 컬렉션 모니터링

ManagementFactory.getGarbageCollectorMXBeans()를 사용하여 프로그래밍 방식으로 가비지 컬렉션 횟수와 시간을 읽거나, Spring Boot 애플리케이션에서 Micrometer를 통해 Prometheus로 내보낼 수 있습니다.

ManagementFactory.getGarbageCollectorMXBeans().forEach(gc ->
    System.out.printf("%s: %d collections, %d ms%n",
        gc.getName(), gc.getCollectionCount(), gc.getCollectionTime()));

빠른 확인

운영 환경에서 1밀리초 미만의 일시 중지 시간을 목표로 하는 가비지 컬렉션 알고리즘은 무엇입니까?

복습

아주 작은 힙에는 직렬 가비지 컬렉터, 일괄 처리 처리량에는 병렬 가비지 컬렉터, 균형 잡힌 작업 부하에는 G1(기본값), 초저지연에는 ZGC와 Shenandoah를 사용합니다. 운영 환경에서 가비지 컬렉션 로그 기록을 활성화하여 문제를 조기에 감지하십시오.

무료로 시작

AI 튜터와 함께 Java을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
104
레슨
374

자주 묻는 질문

“GC 알고리즘: Serial, G1, ZGC, Shenandoah” 강의는 무료인가요?

네 — “GC 알고리즘: Serial, G1, ZGC, Shenandoah” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“GC 알고리즘: Serial, G1, ZGC, Shenandoah”에서 뭘 배우나요?

최신 JVM 수집기별 GC 일시 중지 특성과 처리량 간의 상충 관계를 비교합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“GC 알고리즘: Serial, G1, ZGC, Shenandoah” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. JVM 힙 영역과 객체 수명 주기
  2. GC 알고리즘: Serial, G1, ZGC, Shenandoah
  3. 메모리 누수 감지와 수정
  4. GC 튜닝 플래그와 JVisualVM 프로파일링
← Java Academy(으)로 돌아가기