본문 바로가기

카테고리 없음

[Java] JVM이란???

Java Virtual Machine

 

JVM이란 Java Virtual Machine의 약자로 자바 가상 머신을 가르키는 말이다.

 

 

 

JVM의 역할


자바 어플리케이션을 클래스 로더를 통해 읽어들여 자바 API와 함께 실행 하는것.

Java와 OS사이에서 중개 역할을 하여 JAVA가 OS에 구애받지않고 재사용을 가능하게 해주며 메모리관리, Garbage Collection을 수행한다.

 

JVM은 스택기반의 가상머신

 

 

 

 

JAVA의 실행과정

 

1. 프로그램이 실행되면 JVM은 OS로부터 프로그램이 필요로하는 메모리를 할당받는다. 
   JVM은 용도에따라 메모리를 여러 영역으로 나누어 관리한다.

 

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

 

3. Class loader를 통해 class파일들을 JVM으로 로딩한다.

 

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

 

5. 해석된 바이트코드들은 Runtime Data Areas에 배치되어 실질적인 수행을 한다. 이러한 과정속에서 JVM은 필요에따라 Thread Synchronization과 GC같은 관리작업을 수행한다.

 

 

 

 

JVM 구성요소


Class Loader

JVM 으로 클래스를(.class) 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈.

Runtime시에 동적으로 클래스를 로드한다. jar파일 내 클래스들을 JVM위에 탑재하고 사용하지 않는 클래스들은 메모리에서 삭제한다.

자바는 런타임에 참조하며 클래스를 처음 참조할때, 해당 클래스를 로드하고 링크한다.

 

Excution Engine(실행 엔진)

클래스를 실행시키는 역할.

클래스 로더가 JVM 런타임 데이터 영역에 바이트코드를 배치시키고 실행엔진에 의해서 실행된다.

자바 바이트코드는 기계가 바로 수행할 수 있는 언어보다 비교적 사람이 보기편한 형태로 기술된 것이므로 실행엔진은 바이트 코드를 실제로 JVM내부에서 기계가 실행할 수 있는 형태로 변경하는데 interpreter, JIT 두가지 방식이 있다.

 

 - Interpreter
   자바 바이트코드를 명령어 단위로 실행하지만 한줄씩 수행하기 때문에 느리다는 단점을 가지고있다.

 

 - JIT(Just-In-Time)

  인터프리터 방식을 보완하기 위해 도입된 JIT 컴파일러로, 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일하여 

 네이티브 코드로 변경하고, 이후에는 인터프리팅하지않고 네이티브 코드로 직접 실행하는 방식이다. 네이티브 코드는 캐시에 저장되어 한번 컴파일된 코드는 빠르게 수행할수 있다.

 

  ※ JIT 컴파일러가 컴파일하는 과정은 바이트코드를 인터프리팅하는 것보다 오래걸림, 따라서 한번만 수행하는 코드는 컴파일아닌 인터프리팅하는 것이 유리하다고한다.

 

Garbage Collector

GC를 수행하는 모듈

 

 

 

JVM Runtime Data Area


프로그램을 수행하기위해 OS에서 할당받는 메모리공간

 

추후 정리....


 

 

 

 

 

출처


https://asfirstalways.tistory.com/158

 

#자바가상머신, JVM(Java Virtual Machine)이란 무엇인가?

#JVM이란? JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다 (가상머신이란 프로그램의 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.) JV

asfirstalways.tistory.com