본문 바로가기
language/java

Java Garbage Collector(GC) 원리 완벽 이해하기

by 죄니안죄니 2026. 5. 26.
반응형

Java Garbage Collector(GC) 원리 완벽 이해하기

Java를 공부하다 보면 반드시 만나게 되는 핵심 개념이 바로:

Garbage Collector(GC)

입니다.

실무에서도:

  • 서버 멈춤 현상
  • 메모리 부족
  • 응답 지연
  • CPU 급등
  • OutOfMemoryError

까지 대부분 GC와 연결됩니다.

초보 시절에는 보통:

안 쓰는 객체 지워주는 기능
 

정도로만 이해하기 쉽습니다.

하지만 실제 GC는:

  • JVM 성능
  • Heap 구조
  • 객체 생명주기
  • 애플리케이션 응답속도
  • 대규모 서버 운영

전체와 깊게 연결되는 매우 복잡한 시스템입니다.

이번 글에서는:

  • GC가 왜 필요한가
  • GC 동작 원리
  • Mark & Sweep
  • Minor GC / Full GC
  • Stop-The-World
  • G1GC / ZGC

까지 JVM 내부 관점으로 깊게 정리해보겠습니다.


1. GC(Garbage Collector)란?

Garbage Collection 은:

사용하지 않는 객체 메모리를 자동으로 회수하는 시스템

입니다.

즉:

참조 없는 객체 탐색
↓
Heap 메모리 제거
 

수행.


2. 왜 GC가 필요할까?

C/C++ 같은 언어는:

 
malloc()
free()
 

직접 메모리 해제 필요.

문제:

  • 메모리 누수
  • 이중 해제
  • 잘못된 포인터 접근

발생 가능.


3. Java는 자동 메모리 관리

Java는:

객체 생성은 개발자
메모리 해제는 GC
 

구조.

즉:

 
new User();
 

까지만 개발자가 하고,

삭제는 JVM이 자동 처리.


4. GC 대상은 어디인가?

GC는:

Heap 영역
 

만 관리합니다.

즉:

  • 객체
  • 배열
  • String 객체

등 Heap 대상.


5. Stack은 GC 대상이 아니다

Stack은:

메서드 종료 시 자동 제거
 

됩니다.

즉 GC 불필요.


6. GC 대상 조건

핵심 기준:

“도달 가능(Reachable)한가?”
 

입니다.


7. Reachable 객체

예시:

 
User user = new User();
 

현재:

Stack → Heap 객체 참조 존재
 

즉:

Reachable
 

상태.


8. Unreachable 객체

 
user = null;
 

이제:

참조 없음
 

즉:

GC 대상 가능
 

상태.


9. GC 핵심 원리

GC는 기본적으로:

사용 중인 객체 찾기
↓
안 쓰는 객체 제거
 

과정 수행.


10. 가장 기본 알고리즘: Mark & Sweep

GC 핵심 알고리즘.

구조:

1. Mark
2. Sweep
 

11. Mark 단계

GC Root부터 시작.

예:

  • Stack 변수
  • static 변수
  • JNI 참조

등.

그리고:

참조 가능한 객체 표시(mark)
 

수행.


12. Sweep 단계

Mark되지 않은 객체:

사용 안 하는 객체
 

판단 후 제거.


13. 메모리 단편화(Fragmentation)

문제 발생 가능.

예:

[객체][빈칸][객체][빈칸]
 

메모리 조각화.


14. 그래서 Compact 수행

Compact는:

객체 압축 정렬
 

입니다.

즉:

[객체][객체][빈공간]
 

형태로 정리.


15. Heap 구조

Java Heap은 보통:

Young Generation
Old Generation
 

으로 나뉩니다.


16. 왜 세대 분리할까?

Java 객체 특징:

대부분 빨리 죽음
 

입니다.

즉:

  • 잠깐 생성
  • 금방 GC 대상

객체 매우 많음.


17. Young Generation

새 객체 대부분 생성되는 영역.

구조:

Eden
Survivor 0
Survivor 1
 

18. Eden 영역

새 객체 생성 위치.

예:

 
new Object()
 

대부분 Eden 생성.


19. Minor GC

Eden 꽉 차면:

Minor GC
 

발생.

즉:

  • 살아있는 객체만 Survivor 이동
  • 죽은 객체 제거

수행.


20. Survivor 영역

살아남은 객체 임시 저장.

GC 반복 후 오래 살아남으면:

Old Generation 이동
 

합니다.


21. Old Generation

오래 살아남은 객체 저장.

예:

  • Spring Singleton Bean
  • Cache 객체
  • 장기 유지 데이터

22. Full GC

Old 영역 부족 시:

Full GC
 

발생.

이건 매우 무겁습니다.


23. Stop-The-World(STW)

매우 중요합니다.

GC 수행 중 JVM은 보통:

애플리케이션 실행 잠시 중단
 

합니다.

이를:

Stop-The-World
 

라고 함.


24. 왜 서버가 멈춘 것처럼 보일까?

Full GC 길어지면:

모든 요청 대기
 

가능.

즉:

  • API 응답 지연
  • 서버 멈춤 현상

발생 가능.


25. Minor GC는 비교적 빠름

Young 영역은 작고:

대부분 객체 금방 죽음
 

즉 처리 빠름.


26. Full GC는 위험

Old 영역 객체는:

  • 많고
  • 크고
  • 오래 살아있음

즉:

탐색 비용 큼
 

27. 그래서 GC 튜닝 중요

실무에서는:

  • Heap 크기
  • GC 알고리즘
  • 객체 생성 패턴

매우 중요.


28. 대표 GC 종류


GC 특징
Serial GC 단일 스레드
Parallel GC Throughput 중심
CMS 저지연 시도
G1GC 현대 기본 GC
ZGC 초저지연 GC

29. G1GC란?

Garbage-First Garbage Collector 는:

Heap을 Region 단위로 관리하는 GC

입니다.


30. G1GC 특징

장점:

  • Pause Time 감소
  • 예측 가능한 GC
  • 대용량 Heap 대응

현재 Java 기본 GC.


31. ZGC란?

Z Garbage Collector 는:

초저지연(Low Latency) GC

입니다.

특징:

Stop-The-World 최소화
 

목표.


32. ZGC 특징

  • TB급 Heap 지원
  • 매우 짧은 Pause
  • 대규모 서버용

33. GC 로그 중요성

실무에서는 GC 로그 매우 중요.

대표 옵션:

 
-Xlog:gc
 

설명:


옵션 의미
-Xlog:gc GC 로그 출력

34. Heap 옵션

대표 옵션:

 
-Xms1g -Xmx4g
 

설명:


옵션 의미
-Xms 초기 Heap
-Xmx 최대 Heap

35. 왜 객체 생성 최소화가 중요할까?

객체 많아지면:

GC 대상 증가
↓
GC 빈도 증가
↓
성능 저하
 

가능.


36. StringBuilder가 중요한 이유

 
str += value;
 

반복 시 String 객체 폭증.

즉 GC 부담 증가.

그래서:

 
StringBuilder
 

사용.


37. 메모리 누수(Memory Leak)

Java도 메모리 누수 가능.

대표 사례:

참조 계속 유지
 

예:

  • static Collection
  • ThreadLocal
  • Cache

38. OutOfMemoryError 원인

대표 사례:

객체 계속 살아있음
↓
Heap 부족
 

39. 실무에서 자주 하는 실수

1) GC를 “자동 최적화 시스템”으로 착각

GC도 비용 큼.


2) 객체 생성 비용 무시

대량 생성 시 GC 과부하 가능.


3) Full GC 방치

실서비스 장애 원인 가능.


40. 핵심 흐름 요약

객체 생성
↓
Young Generation 저장
↓
Minor GC
↓
오래 생존 시 Old 이동
↓
Full GC
↓
메모리 회수
 

41. 가장 중요한 핵심 한 줄

GC는 Heap 메모리를 자동 관리하지만
공짜 성능은 아니다
 

입니다.


42. 정리

Garbage Collector(GC)는 단순 메모리 삭제 기능이 아닙니다.

실제로는:

  • JVM 성능
  • Heap 구조
  • 객체 생명주기
  • 서버 응답속도
  • 대규모 시스템 안정성

과 깊게 연결되는 JVM 핵심 시스템입니다.

특히 실무에서는:

  • Minor GC / Full GC
  • Stop-The-World
  • G1GC / ZGC
  • 객체 생성 비용
  • 메모리 누수

를 정확히 이해하는 것이 매우 중요합니다.

다음 글에서는:

GC 종류와 특징(G1GC, ZGC 등)

을 CMS, Parallel GC, Region 구조, Low Latency GC 전략까지 포함해서 깊게 정리해보겠습니다.

반응형

댓글