개요
자바의 기본기를 다지기 위한 스터디를 진행하던 도중 "이것이 자바다"라는 책을 읽고 JVM 의 개념을 추가로 정리한 내용입니다.
JVM
JVM(Java Virtual Machine, 자바 가상 머신) 은 자바 어플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 역할을 한다.
JVM이 Java와 OS 사이의 중개자 역할
특징
- 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환
- 스택 기반의 가상 머신
- 메모리 관리와 GC(Garbage Collection; 가비지 컬렉션)을 수행
구조

크게 보면
- Class Loader
- Runtime data areas
- Execution Engine
으로 나누어져있다.
Class Loader
클래스 파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할
Execution Engine
.class 파일과 같은 ByteCode를 실행 가능하도록 해석
Runtime Data Area
런타임 시 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳(프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역을 의미)
실행 과정
- 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
- 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환시킨다.
- Class Loader를 통해 class 파일들을 JVM으로 로딩한다.
- 로딩된 class 파일들은 Execution Engine을 통해 해석된다.
- 해석된 바이트코드는 Runtime Data Area에 배치되어 실질적인 수행이 이루어지게 된다.
정리
Java가 OS에 종속되지 않고 다양한 운영체제에서 동작하도록 하는 핵심적인 원리가 JVM 이라고 생각하여 간단히 정리해보았습니다.