반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 머신러닝
- 딥러닝
- 컴퓨터과학
- I'm Sorry
- 데이터분석
- 소프트웨어
- 자바스크립트
- 인공지능
- 알고리즘
- 버전관리
- 프로그래밍
- 프로그래밍언어
- 웹개발
- 파이썬
- 컴퓨터비전
- springboot
- 데이터과학
- 디자인패턴
- 소프트웨어공학
- 보안
- 클라우드컴퓨팅
- 자료구조
- 데이터베이스
- 네트워크
- 네트워크보안
- 빅데이터
- Yes
- 컴퓨터공학
- 데이터구조
- 사이버보안
Archives
- Today
- Total
스택큐힙리스트
Java GC와 Stop-the-World 완전 정리 – 성능 병목의 실체 본문
반응형
Java 애플리케이션을 운영하다 보면 "GC 때문에 서버가 멈췄다", "스탑더월드가 발생했다"는 말을 듣곤 합니다. 도대체 GC는 뭔지, 왜 프로그램이 멈추는 건지 궁금하지 않으셨나요? 이번 글에서는 Java의 Garbage Collection(가비지 컬렉션)과 Stop-the-World(스탑더월드) 개념을 쉽게 풀어 설명합니다.
✅ GC(Garbage Collection)란?
Java에서는 프로그래머가 메모리를 직접 해제하지 않아도 됩니다. 대신 JVM이 자동으로 사용되지 않는 객체를 찾아서 메모리에서 제거해주는 역할을 하는 것이 GC입니다.
즉,
"더 이상 참조되지 않는 객체들을 자동으로 청소해주는 기능"
GC 덕분에 Java는 메모리 누수를 줄이고, 메모리 관리를 자동화할 수 있습니다.
✅ GC는 언제 동작할까?
- 힙(heap) 영역의 메모리가 부족해질 때
- System.gc()를 호출했을 때 (JVM이 보장하지는 않음)
- JVM이 필요하다고 판단할 때
✅ Stop-the-World란?
GC가 실행되는 동안, JVM은 모든 애플리케이션 스레드를 멈춥니다.
이 현상을 Stop-the-World라고 부릅니다.
즉,
"GC 작업이 끝날 때까지 애플리케이션 전체가 멈춘다"는 뜻입니다.
이 시간 동안 요청을 받지 못하거나, 응답이 지연될 수 있기 때문에 성능에 큰 영향을 줄 수 있습니다.
✅ 어떤 GC가 얼마나 멈출까?
GC 종류 | Stop-the-World 발생 여부 | 특징 |
Serial GC | 있음 | 단일 스레드, 간단하지만 STW 시간이 김 |
Parallel GC | 있음 | 멀티스레드로 GC 수행, 성능 개선 |
CMS GC | 있음 (짧음) | STW 최소화 시도, 오래된 방식 |
G1 GC | 있음 (짧고 예측 가능) | 서버용 GC, 최근 JVM 기본값 |
ZGC / Shenandoah | 거의 없음 | 초저지연 GC, 최신 고성능 JVM 대상 |
✅ 실무에서 문제 되는 상황
- GC 튜닝이 안 된 서버에서 메모리 부족 시 Full GC가 자주 발생
- 이때 Stop-the-World 시간이 수 초 이상이면, 사용자가 응답 지연을 체감
- 서버의 CPU 사용률이 급락하거나 TPS가 떨어지면 GC 로그 확인 필요
✅ 해결 방법은?
- G1 GC, ZGC 등 최신 GC를 적용해 STW 시간 최소화
- 애플리케이션 메모리 할당 전략 개선 (객체 생성 최소화, 재사용)
- GC 로그 분석 도구 사용 (예: GC Easy, JClarity Censum)
- -Xms, -Xmx, -XX:+UseG1GC 등 JVM 옵션 튜닝
반응형
'개발' 카테고리의 다른 글
Record vs Lombok vs AutoValue 비교 분석 (1) | 2025.07.11 |
---|---|
자바 스프링 개발 시작하기 - 5일차 모던 Java 스킬업 (2) | 2025.07.11 |
Spring Boot 필터·인터셉터에서 발생한 예외 처리 방법 (1) | 2025.07.10 |
[주니어 백엔드 개발자가 반드시 알아야 할 실무 지식] 3장. 성능을 좌우하는 DB 설계와 쿼리 (1) | 2025.07.10 |
@ControllerAdvice 전역 예외 처리 – REST API에서 메시지·HTTP Status 자동 매핑 (1) | 2025.07.10 |
Comments