콘텐츠로 이동

JVM (Java Virtual Machine)

Jan 27, 2026

JVM(Java Virtual Machine)은 Java 바이트코드를 실행하는 추상 컴퓨터 명세로, 프로그래밍 환경 가상화(Programming-Environment Virtualization) 의 대표적 사례이다. “Write Once, Run Anywhere” 목표를 실현하여 플랫폼 독립적인 프로그램 실행을 가능하게 한다.

비유하면, Java 바이트코드는 세계 공용어와 같다. 어떤 “나라”(OS)에서든 “통역사”(JVM)가 이해할 수 있다.

JVM 실행 흐름
1 Java Program
.java 소스 파일
2 Compile
javac 컴파일러
3 Bytecode
.class 파일
4 Class Loader
.class + Java API 로드
5 Verifier
바이트코드 유효성 검증
6 Interpreter/JIT
네이티브 코드 실행
JVM 내부 구조
Java Interpreter / JIT 바이트코드 → 네이티브 명령어 실행
Garbage Collector 미사용 객체 메모리 자동 회수
Verifier 스택 오버플로우, 불법 메모리 접근 방지
Class Loader .class 파일 로드 + Java API 로드
방식설명성능
소프트웨어 인터프리터바이트코드를 하나씩 해석 실행느림
JIT 컴파일러메서드 최초 호출 시 네이티브 코드로 컴파일, 캐싱빠름 (현대 JVM 표준)
하드웨어 구현Java 칩이 바이트코드 직접 실행가장 빠름 (특수 HW 필요)

하드웨어 가상화 vs 프로그래밍 환경 가상화

섹션 제목: “하드웨어 가상화 vs 프로그래밍 환경 가상화”
특성하드웨어 가상화 (VM)프로그래밍 환경 가상화 (JVM)
가상화 대상CPU, 메모리, I/O프로그래밍 API, 런타임
목적전체 OS 실행특정 언어 프로그램 실행
게스트운영체제Java 프로그램
예시VMware, VirtualBoxJVM, .NET CLR
  • Verifier: 바이트코드가 안전한지 실행 전 검증
  • 포인터 연산 금지: 불법 메모리 접근 원천 차단
  • 스택 검사: 오버플로우/언더플로우 방지
  • Sandbox: 신뢰되지 않은 코드의 시스템 접근 제한
기존 방식 vs Java 방식
기존 방식 (C 프로그램)
Windows 컴파일 Linux 컴파일 macOS 컴파일
Java 방식
바이트코드 (.class) JVM (Windows) JVM (Linux) JVM (macOS)

Java의 플랫폼 독립성: 바이트코드를 한 번만 생성하면 각 OS의 JVM이 실행한다.