2025-10-30
오늘 배운 것
📌 정의
자바 바이트코드를 실행할 수 있는 가상 머신(Virtual Machine)
- 운영체제나 하드웨어에 독립적으로 자바 프로그램을 실행 가능하게 함
컴파일된 .class 파일을 실행하며, 메모리 관리, 쓰레드 관리, GC(가비지 컬렉션) 등의 역할을 수행
🧱 JVM 구성 요소
| 구성 요소 | 역할 |
|---|---|
| Class Loader | .class 파일을 JVM 메모리에 로드 |
| Runtime Data Area | 프로그램 실행 시 필요한 데이터 저장 영역 |
| Execution Engine | 바이트코드를 기계어로 변환해 실행 |
| Native Method Interface | C/C++로 작성된 네이티브 메서드 호출 |
| Native Method Libraries | OS에 따라 다른 네이티브 코드 라이브러리 |
🧠 Runtime Data Area 구조 (JVM 메모리 구조)
| 영역 | 설명 |
|---|---|
| Method Area | 클래스 정보, static 변수, 상수 등이 저장됨 |
| Heap | 객체(instance)가 저장되는 공간, GC 대상 |
| Stack | 각 쓰레드마다 생성, 지역변수 + 호출 정보 저장 |
| Program Counter (PC) | 현재 실행 중인 명령어의 주소 저장 |
| Native Stack | C언어 등 네이티브 메서드용 스택 |
🔁 동작 흐름
1. Class Loader가 .class 파일을 메모리로 로드
2. Runtime Data Area에 필요한 구조를 세팅
3. Execution Engine이 바이트코드를 실행
4. GC가 불필요한 객체를 수시로 제거
⛏️ GC(Garbage Collection) 기본
- Heap 영역의 불필요한 객체를 자동으로 정리
- 주요 GC 방식:
- Serial GC: 단일 스레드, 작은 애플리케이션
- Parallel GC: 멀티스레드, Throughput 중시
- CMS (Concurrent Mark Sweep): 지연시간 감소
- G1GC: 예측 가능한 지연 + 고성능 (JDK 9부터 기본)