학습 목표
- JVM 이 무엇이고 왜 필요한지 안다
- 컴파일·로딩·실행 흐름을 그릴 수 있다
- GC 가 자동으로 무엇을 하는지 안다
1. JVM
OS 별 차이를 숨기는 가상 머신. 윈도우용·맥용 JVM 이 따로 있고, 자바 바이트 코드를 받아 자기 OS 명령어로 변환해 실행.
2. 실행 흐름
.java → [javac] → .class (바이트 코드) → [JVM] → OS 명령어
│
├─ Class Loader
├─ Execution Engine (인터프리터 + JIT)
└─ Garbage Collector
3. 핵심 부품
| 부품 | 역할 |
| Class Loader | .class 를 메모리에 적재 (로드→검증→준비→분석→초기화) |
| Execution Engine | 인터프리터(한 줄씩) + JIT 컴파일러(자주 쓰는 부분 통째로) |
| GC | 참조 없는 객체 자동 회수. 개발자가 메모리 해제 신경 안 써도 됨 |
실용 팁: OutOfMemoryError 가 뜨면 GC 가 회수할 수 없는 참조가 어딘가 살아있다는 뜻. 「누가 객체를 계속 들고 있나」를 의심.
4. 커맨드라인 실습
$ javac Hello.java ← 컴파일
$ java Hello ← JVM 실행
Hello, JVM!
학습 확인 체크리스트
- JVM 의 역할을 한 문장으로 설명할 수 있다
- 바이트 코드(
.class) 가 무엇인지 안다
- 인터프리터와 JIT 컴파일러의 차이를 안다
- GC 가 자동으로 무엇을 청소하는지 안다