JVM은 Java를 플랫폼 독립적으로 실행시키는 추상 실행 환경이다.
구조적으로 보면, Java는 Write Once, Run Anywhere 지향한다.
이를 가능하게 하는 계층으로 구조는 다음과 같다.
Java source (.java)
↓ Javac Compiler
Bytecode (.class)
↓ JVM
OS(Operationg System)/ Hardware
JVM 주요책임
1. Bytecode 실행
2. 메모리 할당 및 관리
3. GC(Garbage Collection) 수행
4. Thread 관리
5. Native Method 연동(JIT)
Class Loader
3-1. 구조: Class Loader는 .class 파일을 JVM 메모리에 적재하는 서브시스템이다.
3-2. 로딩 3단계:
1) Loading - Bytecode를 읽어 Method Area에 저장
2) Linking - Verification -> Bytecode 무결성 검증
- Preparation -> static 변수 메모리 할당 (기본값)
- Resolution -> 심볼릭 참조 -> 실제 참조 변환
3) Initialization : static 변수 값 할당, static block 실행
3-3. Delegation Model
Class Loader는 부모 위임 구조를 따른다.
Bootstrap ClassLoader
↓
Exension ClassLoader
↓
Application ClassLoader
장점으로는 보안성 확보, Core Java 클래스 위변조 방지, 클래스 중복 로딩 방지
Runtime Data Area
JVM 메모리는 Thread 공유 영역과 Thread 독립 영역으로 구분된다.
4-1. Thread 공유 영역
Heap : 객체 및 인스턴스 저장, GC 주요 대상
Method Area : 클래스 메타데이터, static 변수, constant pool
(Java 8+ 이후 PermGen 제거 -> Metaspace 사용)
4-2. Thread 독립 영역
JVM Stack : 메서드 호출 단위 Stack Frame 생성
- Stack Frame 구성
Local Variables
Operand Stack
Frame Data(Return Address 포함)
PC Register : 현재 실행 중인 Bytecode 주소 저장
Native Method Stack : JNI 기반 Native 코드 실행 시 사용
GC(Garbage Collection)
GC는 Heap 메모리 자동 관리 메커니즘이다.
6-1. GC 필요성
메모리 누수 방지, 개발자 관리 부담 감소, 안정성 향상
6-2. Generational GC 구조
객체 생존 주기에 따라 Heap을 세대 구분한다.
Young Generation
-> Eden
-> Survivor 0 / 1
Old Generation
동작 흐름:
1) 객체 Eden 생성
2) Minor GC 발생
3) Survivor 이동
4) 장기 생존 시 Old 승격
6-3. GC 유형
Minor GC -> Young 영역
Major GC -> Old 영역
Full GC -> 전체 Heap
6-4. 주요 알고리즘
Mark & Sweep
Copying
Mark & Compack
각 알고리즘은 메모리 단편화 및 성능 특성에 차이가 있다.
JVM이 제공하는 기술적 이점
JVM 구조를 통해 Java는 다음 장점을 확보한다.
결론
JVM은 단순 실행기가 아니라 다음을 통합 관리하는 런타임 플랫폼이다.
특히 Backend 환경에서는 대용량 트래픽 및 멀티 스레드, 메모리 효율성과 직결되므로 JVM 내부 구조 이해는 성능 튜닝 및 장애 분석의 핵심 기반이 된다.
참고자료(References)
Oracle Java Documentation
https://docs.oracle.com/javase/specs/
Java Virtual Machine Specification (JVMS)
https://docs.oracle.com/javase/specs/jvms/
Baeldung — JVM Architecture
https://www.baeldung.com/jvm-architecture
GeeksforGeeks — JVM Memory Structure
https://www.geeksforgeeks.org/jvm-works-jvm-architecture/
Ready-For-Tech-Interview — JVM 정리
https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Java/[Java]%20JVM.md