본문 바로가기
Programming

JAVA JVM 구조 및 튜닝

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 11. 30.
반응형

JVM 구조 및 튜닝

Java 애플리케이션의 성능 최적화를 위해 꼭 알아야 할 JVM 구조GC 튜닝, 프로파일링 도구에 대해 학습해 보겠습니다.


📌 목차

  1. JVM 메모리 구조
  2. GC(Garbage Collector) 이해
  3. 성능 프로파일링 도구 (VisualVM, JConsole)

🧠 1. JVM 메모리 구조

JVM(Java Virtual Machine)은 자바 프로그램이 실행되는 가상 환경으로, 프로그램의 메모리를 효과적으로 관리합니다. JVM 메모리 구조는 다음과 같이 구성됩니다:

  • Method Area: 클래스의 구조 정보, static 변수, 메서드 메타데이터 등이 저장됩니다. PermGen 영역이 제거되고 Metaspace로 대체되었습니다.
  • Heap: 모든 객체와 배열이 저장되며, GC의 주요 대상이 됩니다. Eden, Survivor, Old 영역으로 나뉘며, 대부분의 메모리 사용이 여기서 발생합니다.
  • Stack: 메서드 호출 시 프레임이 생성되며 지역변수, 연산 중간 결과 등을 저장합니다. 각 스레드마다 독립적으로 생성됩니다.
  • Program Counter(PC) Register: 현재 수행 중인 명령어의 주소를 저장합니다.
  • Native Method Stack: JNI(Java Native Interface) 호출 시 사용되는 C/C++ 기반 함수 호출용 스택입니다.

이러한 구조를 정확히 이해하면 OutOfMemoryError, StackOverflowError 등의 원인을 파악하고 해결하는 데 도움이 됩니다.


🧹 2. GC(Garbage Collector) 이해

Garbage Collector는 불필요한 객체를 자동으로 제거하여 메모리를 관리합니다. JVM 튜닝에서 가장 핵심적인 요소이며, 다양한 GC 전략이 존재합니다.

GC 유형 특징
Serial GC 단일 스레드로 동작하며, 단순하지만 정지 시간이 길어 소규모 애플리케이션에 적합
Parallel GC 여러 스레드를 이용해 GC를 병렬 처리하여 Throughput 향상
CMS GC 응답 시간을 중요시하는 환경에 적합하며, Old 영역을 동시 처리
G1 GC 전체 Heap을 Region으로 나누고, 예측 가능한 정지 시간을 제공. Java 9부터 기본 GC로 채택
ZGC, Shenandoah 초저지연을 목표로 설계되어 실시간 시스템, 대용량 서비스에 적합 (Java 11+)

GC 로그를 통해 동작 상태를 분석할 수 있으며, 다음은 주요 JVM 옵션 예시입니다:

# GC 옵션 예시
-XX:+UseG1GC
-XX:+PrintGCDetails
-Xms512m -Xmx1024m

GC 튜닝은 메모리 부족, Stop-The-World 지연 문제를 해결하기 위해 매우 중요합니다.


🧪 3. 성능 프로파일링 도구

애플리케이션의 성능 병목을 파악하고, GC 상태 및 메모리 사용량을 모니터링하기 위해 다양한 도구들이 활용됩니다.

🛠 VisualVM

JDK에서 제공하는 GUI 기반 성능 분석 도구로, 다음과 같은 기능을 제공합니다:

  • Heap Dump 분석
  • 스레드 상태 시각화
  • GC 통계 확인
  • CPU & 메모리 사용량 추적

VisualVM은 애플리케이션을 모니터링하면서 리소스 병목을 실시간으로 파악할 수 있어, 개발자와 운영자 모두에게 유용합니다.

📊 JConsole

JDK에 기본 포함된 모니터링 도구로, JVM의 MBean을 통해 다음 정보를 제공합니다:

  • Heap, Non-Heap 메모리 사용량
  • Live Thread 상태
  • 클래스 로딩 정보
  • GC 횟수 및 시간
# 실행 방법 (JDK 설치 경로 필요)
jconsole

이러한 도구들을 활용하면 자바 애플리케이션의 성능을 정밀하게 분석하고, 적절한 튜닝 방안을 도출할 수 있습니다.

반응형

'Programming' 카테고리의 다른 글

C# 기본 문법과 데이터형  (0) 2025.12.02
C# 소개  (0) 2025.12.01
JAVA 모던 Java 문법 (Java 8~21)  (23) 2025.11.29
JAVA Stream & 람다식  (46) 2025.11.28
JAVA 리플렉션과 어노테이션  (63) 2025.11.27