◇ PART · SPRING

JVM 한눈에

Java와 Spring의 철학 — 읽기 자료

📍 지금 어디를 만지고 있나요?
브라우저
Tomcat
JVM (자바 실행 환경)
Controller
DB

이 차시의 핵심 용어

JVM (Java Virtual Machine)자바 프로그램을 실행하는 가상 머신. OS 종속성 없이 바이트 코드를 실행.
바이트 코드 (.class).java 가 컴파일되어 만들어지는 OS 와 무관한 중간 형태.
Class Loader.class 파일을 JVM 메모리에 적재하는 부품.
Execution Engine바이트 코드를 실제 OS 명령어로 변환·실행. 인터프리터 + JIT 컴파일러.
GC (Garbage Collector)참조되지 않는 객체를 자동으로 메모리에서 회수.

1. 자바의 마법

같은 자바 프로그램이 윈도우에서도 맥에서도 리눅스에서도 똑같이 돕니다. OS 가 다 다른데 어떻게 가능할까요?

왜 알아야 하나

자바 코드가 「어디서·어떻게」 실행되는지 모르면, 메모리 부족(OutOfMemoryError) 같은 오류를 만났을 때 무엇을 의심해야 하는지 가닥을 못 잡습니다.

2. JVM 의 정체

JVM = OS 별 차이를 숨기는 번역기

윈도우용 JVM, 맥용 JVM 이 각자 따로 있고, 자바 바이트 코드를 받아 자기 OS 의 명령어로 변환해 실행합니다.

3. 실행 단계

.java (소스) │ javac 컴파일 ▼ .class (바이트 코드) ← OS 무관 │ ▼ ┌─── JVM ────────────────┐ │ ① Class Loader │ 메모리 적재 │ ② Execution Engine │ 인터프리터 + JIT │ ③ Garbage Collector │ 자동 메모리 청소 └────────────────────────┘ │ ▼ OS 명령어 실행

3-1. 컴파일 (.java → .class)

javac 명령으로 변환. 사람이 짠 자바 코드 → 기계가 빠르게 처리할 수 있는 바이트 코드.

3-2. Class Loader

실행 시점에 필요한 .class 파일을 메모리에 적재. 「로드 → 검증 → 준비 → 분석 → 초기화」 5 단계로 진행.

3-3. Execution Engine

3-4. Garbage Collector

더 이상 참조되지 않는 객체를 자동 회수. 개발자가 free() 같은 해제 코드를 쓸 필요 없음. C/C++ 와 가장 다른 점.

실용 팁

OutOfMemoryError 가 뜨면? GC 가 회수할 수 없을 만큼 객체 참조가 끊기지 않은 경우. 「누가 객체를 계속 들고 있나」를 의심.

4. Before / After

Part 1 끝

자바 코드가 Tomcat 안에서 돈다는 정도만 안다.

이번 차시 끝

그 자바 코드가 JVM 위에서 어떻게 변환·실행·청소되는지 그림을 안다.