IT Developer/Java

Java 기초 <14. JVM 내부 구조 및 GC 원리 (G1 GC, ZGC, Shenandoah)>

TEMA_ 2025. 3. 15. 08:52
반응형

자바 Java

14. JVM 내부 구조 및 GC 원리 (G1 GC, ZGC, Shenandoah)

 

안녕하세요! 태마입니다.

Java 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

자바 Java

포스팅 시작하겠습니다 :)

1. 주제 간단 정리

1. JVM(Java Virtual Machine) 개념

JVMJava 프로그램을 실행하기 위한 가상 머신입니다.
✔ Java 프로그램은 소스 코드바이트코드로 컴파일된 후, JVM에 의해 실행됩니다.
JVM운영 체제와 하드웨어에서 독립적인 실행 환경을 제공하여 플랫폼 독립성을 보장합니다.
✔ JVM은 Java 애플리케이션을 실행하기 위한 런타임 환경으로, 메모리 관리, 스레드 관리, JIT 컴파일 등을 담당합니다.

📌 JVM의 주요 역할
바이트코드 실행 : Java 컴파일러가 생성한 .class 파일을 실행
메모리 관리 : 힙(Heap), 스택(Stack), 메서드 영역 등 메모리 할당 및 관리
가비지 컬렉션(GC) : 메모리에서 사용되지 않는 객체를 자동으로 정리
JIT 컴파일 : Just-In-Time 컴파일을 통해 바이트코드를 네이티브 코드로 변환하여 실행 속도 향상


2. JVM 메모리 구조

JVM은 여러 메모리 영역을 사용하여 프로그램 실행을 관리합니다.

  • 메서드 영역(Method Area) : 클래스와 메타데이터가 저장됩니다.
  • 힙 영역(Heap) : 객체가 생성되고, 가비지 컬렉션이 수행되는 곳입니다.
  • 스택 영역(Stack) : 각 스레드마다 호출된 메서드의 지역 변수와 함수 호출이 저장됩니다.
  • PC 레지스터(Program Counter Register) : 각 스레드의 현재 실행 중인 명령을 추적합니다.
  • 네이티브 메서드 스택(Native Method Stack) : Java가 아닌 언어로 작성된 메서드를 위한 스택입니다.

JVM 메모리 구조 시각화


메서드 영역  클래스, 메타데이터 저장
힙 영역 객체, 가비지 컬렉션
스택 영역  지역 변수, 함수 호출
PC 레지스터 현재 실행 명령 
네이티브 메서드 스택 네이티브 코드 메서드

📌 JVM의 각 메모리 영역은 서로 협력하여 Java 애플리케이션을 실행하고 관리함.


3. 가비지 컬렉션(GC)란?

**가비지 컬렉션(GC)**은 사용되지 않는 객체를 자동으로 정리하여 메모리 누수를 방지하는 JVM의 중요한 기능입니다.
JVM의 힙 영역에 있는 객체 중 더 이상 참조되지 않는 객체를 자동으로 제거하여 메모리 관리를 최적화합니다.
✔ 가비지 컬렉션은 자동 메모리 관리를 통해 프로그래머가 메모리 해제를 직접 관리할 필요를 줄여줍니다.

📌 GC의 주요 특징
자동 메모리 관리
참조되지 않는 객체를 주기적으로 삭제
프로그램 성능을 최적화하기 위해 다양한 GC 알고리즘이 존재

반응형

2. 상세 주제 정리

 

1. GC 알고리즘 종류

Java에서는 다양한 가비지 컬렉션 알고리즘을 제공하며, 각각의 알고리즘은 다른 방식으로 메모리를 관리합니다.

  • Serial GC : 단일 스레드로 가비지 컬렉션을 수행하며, 소형 애플리케이션에 적합
  • Parallel GC : 다중 스레드로 가비지 컬렉션을 수행하여 멀티코어 시스템에서 효율적
  • CMS (Concurrent Mark-Sweep) GC : 멈추지 않는 가비지 컬렉션을 목표로 한 알고리즘으로, 짧은 정지 시간을 제공합니다.

2. G1 GC (Garbage-First Garbage Collector)

G1 GCJava 7부터 제공되는 가비지 컬렉션 알고리즘으로, 대형 애플리케이션을 위한 효율적인 메모리 관리를 제공합니다.
G1 GC힙 영역을 여러 개의 작은 영역으로 나누어 가비지 컬렉션을 수행하여, 단기 및 장기 정지 시간을 최소화합니다.
G1 GC전반적인 성능을 향상시키고, 예측 가능한 정지 시간을 보장합니다.

G1 GC의 특징

  • 단기 정지 시간 최소화
  • 힙 영역을 여러 작은 영역으로 분할하여 효율적 관리
  • 예측 가능한 성능을 제공
  • 멀티코어 시스템에서 효율적
  • 메모리 사용 최적화

G1 GC 튜닝 예제

$ java -XX:+UseG1GC -Xmx2g -Xms2g MyApp

📌 G1 GC는 대형 시스템에서 성능을 최적화하는 데 유용함.


3. ZGC (Z Garbage Collector)

ZGCJava 11에서 도입된 가비지 컬렉터로, 낮은 지연 시간대규모 힙 영역을 효율적으로 처리할 수 있도록 설계되었습니다.
ZGC가비지 컬렉션 시 전체 애플리케이션을 멈추지 않고 일부만 정지하여 지연 시간을 최소화합니다.
✔ **초대형 힙(Heap)**을 사용하는 시스템에서 성능을 극대화하는 데 유용합니다.

ZGC의 특징

  • 낮은 지연 시간 제공
  • 가비지 컬렉션 동안 애플리케이션 정지 시간을 최소화
  • 대형 힙 처리에 적합
  • 실시간 애플리케이션에 유용

ZGC 튜닝 예제

bash
복사
java -XX:+UseZGC -Xmx4g -Xms4g MyApp

📌 ZGC는 초대형 힙을 사용하는 애플리케이션에 최적화되어 있으며, 지연 시간을 최소화


4. Shenandoah GC

Shenandoah GCJava 12에서 도입된 가비지 컬렉션 알고리즘으로, 낮은 지연 시간을 제공하며, 전체 애플리케이션을 멈추지 않고 가비지 컬렉션을 수행합니다.
Shenandoah GC힙 영역을 실시간으로 정리하고, 애플리케이션 정지 시간을 최소화합니다.
✔ 이 GC는 실시간 성능 요구 사항이 중요한 애플리케이션에서 유용합니다.

Shenandoah GC의 특징

  • 낮은 지연 시간 제공
  • 애플리케이션 멈춤 시간을 최소화
  • 실시간 처리에 적합
  • 대형 시스템 및 실시간 시스템에 최적화

Shenandoah GC 튜닝 예제

bash
복사
java -XX:+UseShenandoahGC -Xmx4g -Xms4g MyApp

📌 Shenandoah GC는 실시간 애플리케이션에서 성능을 최적화하는 데 유용


지금까지 Java의 가비지 컬렉션 알고리즘과 다양한 GC에 대해 배웠어요!
👉 "이제 리플렉션과 애노테이션을 활용한 Java의 고급 기능을 배우고 싶다면?"
다음 회차에서 리플렉션과 애노테이션에 대해 다뤄봅시다!

반응형