담비의 개발블로그

[CS]Java JVM 구조 본문

CS(컴퓨터과학)

[CS]Java JVM 구조

담비12 2026. 2. 2. 22:30

Java Virtual Machine(JVM)은 자바 바이트코드(.class 파일)를 실행하기 위한 가상 환경

 

구성요소

1. 클래스 로더 시스템

자바 컴파일러가 생성한 바이트코드를 읽어들여 메모리에 배치하는 역할을 한다.

로딩>링크>초기화 세 단계를 거친다.

 

로딩(Loading): 클래스 파일을 읽어 메모리에 올린다.

링크(Linking): 코드의 유효성을 검증하고 필요한 메모리를 미리 할당한다.

초기화(Initializaion): 클래스 변수들을 적절한 값으로 초기화 한다.

 

2. 런타임 데이터 영역
JVM이 운영체제로부터 할당받은 메모리 공간이다.

영역 특징 공유여부
메서드 영역 클래스 정보, 변수명, static 변수, 상수 등이 저장 모든 스레드 공유
힙 영역 new 키워드로 생성된 객체와 배열이 저장 모든 스레드 공유
스택 영역 메서드 호출시마다 프레임이 쌓이며, 지역변수, 매개변수 등이 저장 스레드별 개별 소유
PC 레지스터 현재 실행중인 JVM 명령의 주소를 기록 스레드별 개별 소유
네이티브 메서드 스택 자바 외의 언어로 작성된 코드를 실행하기 위한 메모리 스레드별 개별 소유

 

3. 실행엔진

메모리에 배치된 바이트코드를 실제로 실행하는 장치이다.

- 인터프리터 (Interpreter)
바이트코드를 한 줄씩 읽어서 해석하고 실행한다. 한 줄씩 실행하기 때문에 초기 실행 속도는 빠르지만, 전체적인 실행 속도는 느리다는 단점이 있다.

- JIT 컴파일러 (Just-In-Time Compiler)
인터프리터의 단점을 보완한다. 반복되는 코드(Hot Spot)를 발견하면 해당 전체 바이트코드를 네이티브 코드로 컴파일하여 직접 실행한다. 이후에는 컴파일된 코드를 바로 사용하므로 성능이 비약적으로 향상된다.

- 가비지 컬렉터 (Garbage Collector, GC)
Heap 영역에서 더 이상 참조되지 않는 객체들을 찾아 메모리에서 해제한다. 개발자가 직접 메모리를 해제할 필요가 없게 만들어주는 자바의 가장 큰 특징 중 하나이다.

 

4. 네이티브 메서드 인터페이스 & 라이브러리
자바 애플리케이션에서 C, C++ 등으로 작성된 라이브러리를 사용할 수 있게 해주는 통로이다. 하드웨어 제어나 성능 최적화가 필요한 특정 기능을 사용할 때 활용된다.