PHpullh
학습 라이브러리/Java/GC 튜닝 기초 — ZGC & G1

JAVA · 성능/JVM

GC 튜닝 기초 — ZGC & G1

JVM GC(가비지 컬렉터) 선택과 기본 튜닝. G1 GC(기본)와 ZGC의 특성을 이해하고, 애플리케이션 특성에 맞는 GC를 선택하여 지연시간과 처리량을 최적화합니다.

성능/JVM고급gczgcg1jvmperformance-tuning

핵심 설명

JVM GC(가비지 컬렉터) 선택과 기본 튜닝. G1 GC(기본)와 ZGC의 특성을 이해하고, 애플리케이션 특성에 맞는 GC를 선택하여 지연시간과 처리량을 최적화합니다.

Java code

// === GC 선택 가이드 ===

// 1. G1 GC (Java 9+ 기본) — 균형 잡힌 범용 GC
// java -XX:+UseG1GC -Xms4g -Xmx4g
//   -XX:MaxGCPauseMillis=200      # 목표 일시 정지 시간
//   -XX:G1HeapRegionSize=16m      # 리전 크기 (1~32MB)
//   -XX:InitiatingHeapOccupancyPercent=45  # 혼합 GC 시작 임계값
//   -Xlog:gc*:gc.log:time,tags    # GC 로그
//   -jar app.jar

// 2. ZGC (Java 15+) — 초저지연 (<1ms 일시 정지)
// java -XX:+UseZGC
//   -Xms4g -Xmx4g
//   -XX:+ZGenerational             # Java 21: 세대별 ZGC (권장)
//   -Xlog:gc*:gc.log:time,tags
//   -jar app.jar

// 3. 프로그래밍으로 GC 정보 조회
import java.lang.management.*;
import java.util.List;

public class GCMonitor {
    public static void printGCInfo() {
        List<GarbageCollectorMXBean> gcBeans =
            ManagementFactory.getGarbageCollectorMXBeans();

        for (GarbageCollectorMXBean gc : gcBeans) {
            System.out.printf("GC: %-20s 횟수: %d, 총 시간: %dms%n",
                gc.getName(), gc.getCollectionCount(),
                gc.getCollectionTime());
        }

        MemoryMXBean mem = ManagementFactory.getMemoryMXBean();
        System.out.printf("힙 사용: %dMB / %dMB%n",
            mem.getHeapMemoryUsage().getUsed() / 1024 / 1024,
            mem.getHeapMemoryUsage().getMax() / 1024 / 1024);
    }

    public static void main(String[] args) {
        printGCInfo();
        // 할당 부하 테스트
        for (int i = 0; i < 100_000; i++) {
            byte[] tmp = new byte[1024];
        }
        printGCInfo();
    }
}

학습 팁

일반적으로 G1 GC로 시작하세요. 지연시간이 중요한 서비스(금융, 게임)는 ZGC를, 배치 처리 등 처리량이 중요하면 -XX:+UseParallelGC를 고려하세요.

주의할 점

-Xms-Xmx를 동일하게 설정하면 힙 리사이징 오버헤드를 방지합니다. GC 로그 없이 튜닝하면 추측에 의존하게 되므로 반드시 -Xlog:gc*를 활성화하세요.

자주 묻는 질문

GC 튜닝 기초 — ZGC & G1란 무엇인가요?

JVM GC(가비지 컬렉터) 선택과 기본 튜닝. G1 GC(기본)와 ZGC의 특성을 이해하고, 애플리케이션 특성에 맞는 GC를 선택하여 지연시간과 처리량을 최적화합니다.

GC 튜닝 기초 — ZGC & G1 학습 시 주의할 점은 무엇인가요?

-Xms 와 -Xmx 를 동일하게 설정하면 힙 리사이징 오버헤드를 방지합니다. GC 로그 없이 튜닝하면 추측에 의존하게 되므로 반드시 -Xlog:gc* 를 활성화하세요.