728x90
반응형
자바 가상 머신(JVM)은 자바 프로그램을 실행하는 가상의 운영체제입니다. 자바 프로그램은 중간 단계의 바이트코드를 사용하므로, 이를 실행할 수 있는 JVM이 필요합니다. JVM은 자바 프로그램이 다양한 운영체제에서 동일하게 실행될 수 있게 해주는 중요한 역할을 합니다.
1. JVM의 개념
- 자바 프로그램은 운영체제에서 직접 실행되지 않습니다. 자바 소스 코드는 기계어가 아닌 바이트코드로 컴파일되며, 이를 해석하고 실행하는 가상의 환경이 JVM입니다.
- JVM은 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공하며, 메모리 관리와 같은 시스템 자원을 효율적으로 관리합니다.
- 운영체제마다 프로그램 실행 방식이 다르지만, JVM은 자바 프로그램이 다양한 운영체제와 기기에서 동일하게 동작하도록 설계되었습니다.
2. JVM의 주요 기능
- 플랫폼 독립성: JVM은 자바 프로그램이 특정 운영체제나 하드웨어에 종속되지 않도록 하며, 여러 플랫폼에서 동일한 코드를 실행할 수 있게 합니다.
- 메모리 관리: JVM은 자동으로 메모리를 관리하며, 가비지 컬렉션(Garbage Collection)을 통해 불필요한 객체를 정리해 메모리 누수 문제를 줄여줍니다.
- 다중 스레드 지원: JVM은 다중 스레드 프로그래밍을 지원하고, 스레드 간 동기화와 관련된 복잡한 작업을 간소화합니다.
- 예외 처리: 프로그램 실행 중 발생할 수 있는 예외를 처리하여, 비정상적인 종료를 방지합니다.
3. JVM의 구성 요소
1) 클래스 로더(Class Loader)
- 자바는 동적으로 클래스를 로딩하므로, 프로그램 실행 중에 필요한 클래스를 JVM에 연결합니다.
- 클래스 로더는 클래스 파일(.class)을 로드하고 링크하여 JVM 메모리에 배치하는 역할을 합니다. 클래스가 인스턴스화되면, 이를 메모리에 로드합니다.
2) 실행 엔진(Execution Engine)
- 실행 엔진은 클래스 로더가 로드한 바이트코드를 실제로 실행하는 모듈입니다.
- 자바 인터프리터(Interpreter): 바이트코드를 한 줄씩 해석해 실행하는 방식으로, 속도가 느리지만 구현이 간단합니다.
- JIT 컴파일러(Just-In-Time Compiler): 인터프리터의 속도 문제를 해결하기 위해 도입된 방식으로, 바이트코드를 기계어로 변환해 빠르게 실행합니다. 자주 실행되는 코드는 JIT 컴파일러가 최적화하여 성능을 향상시킵니다.
3) 가비지 컬렉터(Garbage Collector)
- 가비지 컬렉터는 더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제해주는 역할을 합니다. 개발자는 직접 메모리를 관리할 필요 없이 JVM이 이를 처리합니다.
4) 런타임 데이터 영역(Runtime Data Area)
JVM이 프로그램을 실행할 때 사용하는 메모리 영역으로, 여러 가지 세부 영역으로 나뉩니다.
- Method Area: 클래스, 메서드, 필드 등의 메타 정보를 저장하는 영역으로, 모든 스레드가 공유합니다.
- Runtime Constant Pool: Method Area 내에서 상수 풀을 관리하는 영역입니다. 중복된 상수를 방지하고 효율적으로 관리합니다.
- Heap: 인스턴스가 동적으로 생성되어 저장되는 공간으로, 크게 New/Young 영역, Old 영역, Metaspace로 나뉩니다.
- PC Register: 각 스레드별로 현재 실행 중인 JVM 명령어의 주소를 기록하는 레지스터입니다.
- JVM Stack: 메서드 호출과 관련된 정보(매개변수, 지역 변수, 반환 주소 등)를 저장하는 영역입니다. 메서드 실행이 종료되면 스택에서 제거됩니다.
- Native Method Stack: 자바 외의 네이티브 코드(C/C++ 등)를 위한 스택입니다. Java Native Interface(JNI)를 통해 호출되는 네이티브 코드를 처리합니다.
[출처 : https://www.tcpschool.com/java/java_intro_programming / https://steemit.com/kr/@parkjp/java-jvm]
728x90
반응형
'Programming Language > Java' 카테고리의 다른 글
[Java/개념] 타입 변환 (Type Conversion) (0) | 2024.10.07 |
---|---|
[Java/개념] 자바 연산자 (Operators) (0) | 2024.10.07 |
[Java/개념] 자료형과 변수 (1) | 2024.10.07 |
[Java/개념]JDK와 JRE의 차이 (0) | 2024.10.07 |
[Java/개념] JVM(Java Virtual Machine) 동작 과정 (1) | 2024.10.07 |