2025-03-27

JVM 구조

JVMJavaClass LoaderGCJIT

JVM 구조


Class Loader

Class Loader는 .class 파일을 읽어 JVM 내부 메모리에 로딩하는 역할을 합니다. 세 가지 로더를 사용합니다.

  • Bootstrap ClassLoader: rt.jar (핵심 JDK 클래스) 처리
  • Extension ClassLoader: --module-path를 통한 모듈 관리
  • Application ClassLoader: 사용자가 작성한 클래스 처리

로딩 순서: Loading → Linking (verification/preparation/resolution) → Initialization


Runtime Data Area

1. Method Area

  • 모든 스레드가 공유
  • 클래스 메타데이터 저장

2. Heap

  • 객체와 배열을 포함
  • 가비지 컬렉션 대상
  • 모든 스레드가 공유

3. Stack

  • 스레드별로 생성
  • 메서드 호출 시 스택 프레임 생성
  • 지역 변수와 오퍼랜드 스택 포함
  • StackOverflowError 발생 가능

4. Program Counter (PC Register)

  • 각 스레드가 현재 실행 중인 명령어의 주소를 저장

5. Native Method Stack

  • 외부 네이티브 메서드(C/C++ 호출) 처리

Execution Engine

1. Interpreter

  • 바이트코드를 한 줄씩 번역
  • 실행 속도가 느림

2. JIT (Just-In-Time Compiler)

  • 자주 호출되는 코드를 네이티브 코드로 변환
  • 실행 성능을 크게 향상

3. Garbage Collector (GC)

  • 힙 메모리를 관리하고 사용하지 않는 객체를 자동 제거
  • 다양한 알고리즘 사용 가능 (Serial, Parallel, CMS, G1, ZGC)
  • Stop-the-world 일시 정지 발생 가능

4. Native Interface (JNI)

  • Java에서 C/C++ 라이브러리 호출 가능 (OpenGL, OS API 등)