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 등)