Java Virtual Machine (JVM)은 Java 애플리케이션을 구동하는 런타임 엔진입니다. 컴파일된 Java 바이트코드를 네이티브 기계 명령어로 변환해 실행하며, JVM을 지원하는 모든 플랫폼에서 동작합니다. JVM은 Java Runtime Environment(JRE)의 핵심 구성 요소입니다. 특정 OS용 기계어로 직접 컴파일하는 언어와 달리, Java 컴파일러는 플랫폼 독립적인 바이트코드를 생성하고 JVM이 이를 런타임에 해석하거나 컴파일합니다.
JVM 동작 방식
Java 소스는 먼저 바이트코드로 컴파일되고, JVM이 이를 해석하거나 JIT(Just-In-Time) 컴파일로 네이티브 코드로 변환합니다. JVM은 메모리 할당, 스레드 스케줄링, 네이티브 라이브러리와의 상호작용도 관리합니다.
이 튜토리얼에서 배울 내용:
JVM 아키텍처
소프트웨어 코드 컴파일 및 실행 과정
C 코드 컴파일 및 실행
JVM에서 Java 코드 컴파일 및 실행
Java가 컴파일과 해석을 모두 사용하는 이유
Java 성능에 영향을 주는 요소들
JVM 아키텍처
JVM 설계는 모듈러하며, Java 코드를 로드, 검증, 실행하기 위해 협력하는 여러 서브시스템으로 구성됩니다.
Class Loader — 클래스 파일 로드 및 링킹(검증, 준비, 해결) 및 초기화 수행.
Method Area — 클래스 구조, 메타데이터, 상수 풀, 메서드 코드 저장.
Heap — 모든 객체, 인스턴스 변수, 배열 보관. 모든 스레드 간 공유.
Java Stack — 각 스레드마다 고유한 스택으로 지역 변수와 부분 결과 저장. 메서드 진입 시 새 프레임 생성, 종료 시 팝.
Program Counter (PC) Register — 각 스레드별 다음 실행할 명령어 주소 보관.