JVM Structure
JVM 구조
Last updated
JVM 구조
Last updated
자바VM은 자바 프로그램을 실행하는 가상 머신으로, 여러 구성 요소로 나뉩니다. 주요 구성 요소는 다음과 같습니다:
클래스 로더(Class Loader)
메모리 영역(Memory Areas)
메서드 영역(Method Area)
힙 (Heap)
PC 레지스터 (PC Register)
JVM 스택 (JVM Stack)
네이티브 메서드 스택 (Native Method Stack)
실행 엔진(Execution Engine)
Java Native Interface (JNI)
네이티브 메서드 라이브러리(Native Method Libraries)
클래스 로더는 JVM이 자바 클래스 파일을 동적으로로드하고, 이를 런타임 데이터 영역으로 배치하는 역할을 합니다. 클래스 로더는 계층 구조로 되어 있으며, 주로 세가지 종류가 있습니다.
Bootstrap ClassLoader: JVM 내부에 내장된 기본 클래스들을 로드합니다.
Extention ClassLoader: 기본 클래스 외의 추가적인 라이브러리를 로드합니다.
Application ClassLoader: 애플리케이션 클래스 로더로, 사용자 정의 클래스 및 애플리케이션에서 사용되는 클래스를 로드합니다.
JVM은 실행 중에 다양한 메모리 영역을 사용합니다.
메소드 영역: 클래스 메타데이터, 상수, 스태틱 변수 등을 저장합니다.
힙: 모든 객체 인스턴스와 배열을 저장합니다
PC 레지스터: 현재 실행 중인 JVM 명령어의 주소를 가리킵니다.
스택: 각 스레드마다 별도로 생성되며, 메서드 호출 시 생성되는 프레임을 저장합니다.
네이티브 메서드 스택: 네이티브 메서드 호출 시 사용되는 스택입니다.
실행 엔진은 JVM의 핵심 구성 요소로, 자바 바이트코드를 실제 머신 코드로 변환하고 실행하는 역할을 합니다. 실행 엔진은 세 가지 주요 컴포넌트로 구성됩니다.
인터프리터: 바이트코드를 한 줄씩 읽어 실행합니다. 초기 시작 속도가 빠르지만, 반복되는 코드를 실행할 떄는 비효율적입니다.
JIT 컴파일러(Just-In-Time): 반복적으로 실행되는 바이트코드를 머신 코드로 변환하여 캐싱합니다. 실행속도를 향상시킵니다.
가비지 컬렉터: 더 이상 참조되지 않는 객체를 메모리에서 제거하여 메모리 누수를 방지합니다.
자바 애플리케이션이 C, C++ 같은 네이티브 코드와 상호작용할 수 있게 해주는 인터페이스입니다. JNI를 통해 네이티브 라이브러리를 호출할 수 있으며, 시스템 레벨의 기능을 사용할 수 있습니다.
JNI를 통해 호출되는 네이티브 코드 라이브러리입니다. 성능 최적화 및 하드웨어 접근을 위해 사용됩니다.