JVM(Java Virtual Machine)은 자바 바이트코드를 실행할 수 있는 가상 기계입니다.
자바로 작성된 프로그램은 모두 JVM에서 실행되며, 이를 통해 자바 프로그램이 JVM만 설치 되어 있다면 어떤 운영 체제에서도 동일하게 작동할 수 있도록 합니다. JVM은 자바의 플랫폼 독립적인 특성을 가능하게 하는 핵심 요소입니다.
JVM의 주요 구성 요소
- 클래스 로더(Class Loader): 클래스 파일들을 런타임 데이터 영역으로 로드하는 기능을 담당합니다. 이 과정에서 로딩, 링크, 초기화 단계를 거칩니다.
- 런타임 데이터 영역(Runtime Data Areas): 프로그램 실행 중에 사용되는 다양한 데이터를 저장하는 영역으로, 메소드 영역, 힙 영역, 스택 영역, 프로그램 카운터, 네이티브 메소드 스택 등이 있습니다.
- 메소드 영역: 모든 스레드가 공유하는 영역으로, 클래스 데이터, 상수, 메소드 코드 등을 저장합니다.
- 힙 영역: 모든 스레드가 공유하는 영역으로, 인스턴스 및 배열 등 객체를 저장합니다.
- 스택 영역: 각 스레드마다 하나씩 존재하며, 메소드 호출과 반환에 따른 실행 흐름을 관리합니다. 로컬 변수와 부분 결과를 저장합니다.
- 프로그램 카운터: 현재 실행 중인 JVM 명령의 주소를 가집니다.
- 실행 엔진(Execution Engine): 바이트코드를 실행시키는 역할을 합니다. 인터프리터와 JIT 컴파일러로 구성되어 있으며, 바이트코드를 한 줄씩 해석하거나, 전체 바이트코드를 네이티브 코드로 변환하여 실행 속도를 높입니다.
- 네이티브 메소드 인터페이스(Native Method Interface, JNI): 자바 애플리케이션이 네이티브 애플리케이션 라이브러리(C, C++ 등)를 사용할 수 있게 해주는 인터페이스입니다.
- 네이티브 메소드 라이브러리(Native Method Libraries): JNI를 통해 사용되는 C, C++ 등의 언어로 작성된 라이브러리입니다.
JVM의 작동 과정
- 컴파일 과정: 자바 소스 코드(.java 파일)는 자바 컴파일러에 의해 바이트코드(.class 파일)로 컴파일됩니다.
- 클래스 로딩: JVM이 프로그램을 실행시킬 때, 필요한 클래스 파일들을 로드합니다.
- 바이트코드 검증: 로드된 바이트코드가 JVM에 안전한지 검사합니다.
- 실행: 실행 엔진이 바이트코드를 실행합니다. 필요에 따라 네이티브 메소드를 호출할 수도 있습니다.
- 가비지 컬렉션: JVM은 더 이상 참조되지 않는 객체를 자동으로 관리하고 메모리를 해제합니다.
'웹개발 > java' 카테고리의 다른 글
자바 컬렉션 프레임워크 (0) | 2024.03.27 |
---|---|
자바 디자인패턴 (0) | 2024.03.27 |
자바 상속 (1) | 2024.03.19 |
자바 재귀호출(Recursive Call) (1) | 2024.03.19 |
자바 정규식 (1) | 2024.03.17 |