본문 바로가기
개발 공부/Java

자바 GC 정리 ft. JIT 컴파일러

by 코딩호야 2025. 5. 28.

GC란 무엇인가?

 

GC는 더 이상 사용되지 않는 객체를 자동으로 메모리에서 제거해주는 자바의 기능이다.

C나 C++과 달리 Java는 free(), delete 같은 메모리 해제 함수가 없다.

개발자가 객체를 만들고 나면 그 객체를 더 이상 참조하지 않는 순간 GC가 이를 감지하고 힙에서 제거한다.

덕분에 메모리 누수, 잘못된 메모리 해제 등에서 자유로운 환경을 제공한다.

 

 

자바 힙 구조와 GC 대상

자바는 객체를 Heap 영역에 저장하며, 이 영역은 다음처럼 세대별로 나뉘어 있습니다.

 

영역                                    설명

Young Generation 새로 생성된 객체가 저장. 대부분 여기서 생존하지 못하고 GC됨
Old Generation Young에서 살아남은 객체들이 옮겨지는 공간
Metaspace 클래스 정보 등 메타데이터 저장 (Java 8부터 PermGen → Metaspace로 변경됨)

 

 

GC의 종류

 

GC 종류                             특징                                                                    사용 예

Serial GC 단일 스레드, 작은 앱에 적합 테스트, 데스크탑 앱
Parallel GC 멀티스레드, Throughput 중심 기본값 (Java 8)
CMS (Deprecated) 낮은 지연 중심, 부분 병렬 실시간 웹 서비스
G1GC 지연과 처리량의 균형, Java 9부터 추천 대부분의 서버 환경
ZGC / Shenandoah 초저지연, GC 중지 시간 <10ms 초대용량, 실시간 처리 시스템 (Java 11+)

 

 

GC의 단점

단점                                           설명

Stop-The-World GC 수행 시 JVM이 일시적으로 멈추는 현상
예측 어려움 GC 발생 시점과 소요 시간은 예측 불가
튜닝 필요 성능 민감한 앱은 힙 크기, GC 알고리즘 설정이 매우 중요

 

 

JIT 컴파일러란?

자바는 바이트코드를 실행할 때 JVM이 인터프리터 방식으로 한 줄씩 해석한다.

하지만 성능 향상을 위해 자바는 JIT 컴파일러를 함께 사용한다.

JIT 컴파일러는 실행 중에 반복 호출되는 메서드(HotSpot)를 감지하고, 해당 바이트코드를 기계어로 변환한다.

 

 

JIT GC 차이

항목                         JIT 컴파일러                                                GC

목적 실행 속도 최적화 메모리 확보
작동 시점 메서드가 자주 실행될 때 메모리 부족, 내부 조건 발생 시
영향 빠른 실행 성능 Stop-The-World로 인한 지연 발생

 

정리

- GC는 메모리를, JIT는 실행 속도를 자동으로 관리하여 개발자가 성능/자원 걱정 없이 개발할 수 있게 해준다.

- 하지만 둘 다 언제 발생할지 정확히 예측하기 어렵고, 성능에 영향을 줄 수 있으므로 서버 환경에서는 적절한 설정과 튜닝이 필요하다.

 

'개발 공부 > Java' 카테고리의 다른 글

해시 정리 (Hash)  (1) 2025.05.29
자바 예외 처리 정리 - Checked, Unchecked, Error  (1) 2025.05.28
[Java] JVM 메모리 구조  (0) 2024.11.10
SOLID - 객체 지향 설계의 5원칙  (0) 2024.11.01
도서 관리 프로그램  (4) 2022.08.18