JVM (Java Virtual Machine)
JVM이란?
Java Virtual Machine의 줄임말이다.
자바를 실행하기 위한 가상 기계(컴퓨터)라고 할 수 있다.
JVM은 자바 바이트코드를 해석하고 실행하는 역할을 수행한다.
특징
- 플랫폼 독립성
- JVM은 플랫폼 독립적인 특성을 가지고 있다.
- 자바 프로그램은 소스 코드를 자바 컴파일러를 통해 바이트 코드로 변환하고, JVM은 이 바이트코드를 특정 플랫폼에서 실행할 수 있게 해 준다.
- 동일한 자바 프로그램을 여러 운영체제나 아키텍처에서 실행할 수 있다.
- 자동 메모리 관리
- JVM은 가비지 컬렉션(Garbage Collection)을 통해 자동으로 메모리를 관리한다.
- 바이트코드 실행
- 자바 소스 코드는 자바 컴파일러에 의해 자바 바이트 코드로 변환된다.
- JVM은 이 바이트코드를 인터프리터나 JIT(Just-In-Time) 컴파일러를 사용하여 실행하며, 이로써 실행속도를 최적화한다.
- 스레드 관리
- JVM은 멀티스레딩을 지원하고, 스레드 스케줄링과 동기화를 관리하여 여러 스레드에서 동시에 실행되는 자바 프로그램을 지원한다.
- 자바 API 지원
- JVM은 자바 표준 라이브러리 및 다양한 API를 제공하여 다양한 기능을 사용할 수 있게 한다.
JVM 구성요소
JVM은 크게 3가지 주요 부분으로 나뉜다.
- 1. 클래스 로더(Class Loader)
- 클래스 로더는 자바 클래스 파일들을 JVM으로 동적으로 로드하고 링크하는 역할을 담당한다.
- 2. 런타임 데이터 영역(Runtime Data Area)
- 런타임 데이터 영역은 JVM이 프로그램을 실행하는 동안 사용하는 데이터들을 저장하는 영역이다.
- 구성요소
- 메서드 영역(Method Area) : 클래스 정보, 정적 변수, 메서드 코드 등이 저장되는 영역
- 힙(Heap) : 동적으로 생성된 객체 인스턴스들이 저장되는 영역
- 스택(Stack) : 메서드 호출과 관련된 정보, 지역 변수, 중간 연산 결과 등이 저장되는 영역
- PC Register : 스레드가 실행 중인 부분의 주소를 저장
- Native Method Stack : 네이티브 코드(다른 언어로 작성된 코드)를 실행하기 위한 스택 영역
- 구성요소
- 런타임 데이터 영역은 JVM이 프로그램을 실행하는 동안 사용하는 데이터들을 저장하는 영역이다.
- 3. 실행 엔진(Execution Engine)
- 실행 엔진은 JVM에서 자바 바이트코드를 기계어로 해석하거나, JIT컴파일러를 통해 기계어로 변환하여 실행한다.
- 종류
- 인터프리터(Interpreter) : 바이트코드를 한 줄씩 해석하고 실행한다. 빠른 실행이 필요한 경우에는 적절하지 않을 수 있다.
- JIT 컴파일러 : 인터프리터의 성능 문제를 극복하기 위해, 바이트코드를 네이티브 코드로 변환하여 실행한다. 변환된 코드는 캐시에 저장되어 재사용된다.
- 가비지 컬렉터 : 더 이상 참조되지 않는 개체를 수거하는 역할을 한다.
Reference
[JAVA] JVM이란? 개념 및 구조 (JDK, JRE, JIT, 가비지 콜렉터...)
JVM이란 무엇인가 Java Virtual Machine의 줄임말. 직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다. Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되
doozi0316.tistory.com
https://poetic-code.tistory.com/118
[Java] 런타임 데이터 영역(Runtime Data Area)
JVM이 OS위에서 실행되면서 할당받는 메모리 영역이 바로 런타임 데이터 영역(Runtime Data Arae) 입니다. 이 영역은 크게 5가지 조금 세분화하면 6가지 영역으로 나눌 수 있습니다. 스레드 관점 스레드
poetic-code.tistory.com
'자바' 카테고리의 다른 글
스프링 테스트 코드 @RestControllerAdvice를 거치게 하는 방법 (0) | 2024.01.25 |
---|---|
자바 Atomic 패키지 (2) | 2024.01.24 |
자바(JAVA) - synchronized 란? (0) | 2024.01.16 |
객체 지향 4대 특성 간단 정리 (0) | 2022.09.07 |
JDK, JRE, JVM 간단 정리 (0) | 2022.09.06 |