본문 바로가기
Java/JAVA에 대하여

JVM이란

by lms0806 2021. 12. 25.
728x90
반응형

#JVM이란?

JVM이란 자바 가상 머신(Java Virtual Machine)의 약자로 줄여 부르는 말이다.

JVM은 자바 애플리케이션을 class loader를 통해 읽어 자바 API와 함께 실행하는 것이다.

JVM은 JAVA와 OS사이에 위치해 중개자 역할을 수행하여 OS에 구애받지 않고 재사용이 가능하게 해준다.(어디서든 실행 가능)

JVM은 스택 기반의 가상머신이다.

 

#자바프로그램 실행 과정

1. 프로그램이 실행되면 JVM은 OS로부터 프로그램이 필요로 하는 메모리를 할당 받는다.

2. 자바 컴파일러(javac)가 자바 소스코드(.java)를 읽어 자바 바이트코드(.class)로 변환시킨다.

(자바를 처음 배울 때 콘솔창에서 직접 실행시키는 방법을 대신 해준다.)

3. Class Loader를 통해 class파일들이 JVM에 로딩된다.

4. 로딩된 class 파일들은 Execution engine을 통해 해석된다.

5. 해석된 코드는 Runtime Data Areas에 배치되어 수행이 이루어진다.

 

#JVM 구조

Class Loader(클래스 로더)

RunTime 시점에 클래스를 로딩하게 해주며 클래스의 인스턴스를 생성하면 클래스 로더를 통해 메모리에 로드됨

Runtime Data Area

JVM이 프로그램을 수행하기 위해 OS로부터 별도로 할당 받은 메모리 공간

Execution Engine(실행 엔진)

Load된 Class의 ByteCode를 실행하는 Runtime Module

Class Loader를 통해 JVM 내에 Runtime Data Areas에 배치된 바이트 코드는 Execution Engine을 통해 실행되며, 실행 엔진은 자바 바이트 코드를 명령어 단위로 읽어서 실행함

Interpreter(인터프리터)

실행 엔진은 자바 바이트 코드를 명령어 단위로 읽어서 실행한다(인터프리터 방식)

JIT(Just-In-Time)

인터프리터 방식의 단점을 보완하기 위해 도입된 JIT 컴파일러

JIT는 ByteCode를 어셈블러 같은 NativeCode로 바꿔서 실행이 빠르지만 반환하는데 비용이 발생한다.

이와 같은 이유로 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고 Interpreter 방식을 사용하다 일정한 기준이 넘어가면 JIT 방식으로 실행한다.

 

 

728x90
반응형

'Java > JAVA에 대하여' 카테고리의 다른 글

HashSet 내부  (2) 2022.09.24
JAVA의 깊은 복사, 얕은 복사  (0) 2021.12.30
JAVA 관련 deep한 내용들이 나와있는 사이트 정리  (0) 2021.12.24
[JAVA] Arrays.fill()  (0) 2021.10.29
[JAVA] 배열 전체 출력  (5) 2021.07.31

댓글