안녕하세요~ Java Virtual Machine에 대해 포스팅해보려고 합니다. 

 

Java는 운영체제에 독립적이라는 특징을 가지고 있는데요,

이는 운영체제와 상관 없이 어디서 개발하더라도 어디서든 실행할 수 있다는 것(WORA)을 말합니다.

이는 JVM 덕분입니다!

 

 

JVM = Java Virtual Machine

JVM 은 자바 바이트 코드(Class 파일)를 OS에 특화된 코드로 변환하여 실행합니다. 

-> 특정 OS에 특화된 코드로 변경하기 때문에 JVM은 플랫폼에 종속적이지만, 이 JVM 덕분에 Java 자체는 플랫폼에 독립적이게 됩니다.

 

 

JVM은 크게 4가지로 구성됩니다.

1. Class Loader

2. Execution Engine

3. Runtime Data Area (Memory)

4. Native

 

 

1. Class Loader

.Java 파일을 자바컴파일러가 컴파일 하면, .class 파일이 생성됩니다. ( 자바 바이트 코드 )

이렇게 생성된 클래스 파일들을 메모리(Runtime Data Area)에 적재시키는 역할을 합니다.

 

2. Execution Engine

Class Loader에 의해 메모리에 적재된 .class 파일들을 기계어로 변경해 명령어 단위로 실행하는 역할을 합니다. 

 

3. Runtime Data Area

실행된 인스턴스(데이터)들이 적재되는 JVM의 Memory 영역입니다.

 

Runtime Data Area는 다음과 같은 영역으로 구분되어 있습니다.

Area Data
Method Area Field의 정보(클래스 전역 변수의 이름, 데이터 타입, 접근 제어자 등)
Method의 정보(이름, Return Type, 접근 제어자, 파라미터 등)
Type 정보( 인터페이스인지, 클래스인지)
static 변수 등이 저장되는 영역입니다.
Heap Area 객체, 배열이 생성되는 영역입니다.
Stack Area 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값이 생성되는 영역입니다.

< Animal an = new Animal(); 이란 소스 작성을 하면,
an은 Stack 영역에 생성되고 new로 생성된 Animal 인스턴스는 Heap 영역에 생성됩니다. an은 Heap 영역의 주소 값을 가지고 있습니다.

한줄정리: Stack 영역에 생성된 an이 Heap 영역에 생성된 인스턴스를 참조한다.>
PC Register Thread가 생성될 때 마다 생성되는 영역으로,
현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역입니다.
Native Method Stack 자바 외의 언어로 작성된 Native 코드를 위한 메모리 영역입니다.

 

Heap, Method 영역은 모든 쓰레드가 공유하는 영역입니다. 

 

 

 

출처: https://webdevtechblog.com/jvm-java-virtual-machine-architecture-94b914e93d86

이와 같은 역할을 하는 JVM을 포함하여 Library와 함께 Java RunTime Environment를 구성합니다.

따라서 JRE 만 설치하면 모든 플랫폼에서 Java 어플리케이션을 실행할 수 있게 됩니다.

 

 

JVM이 동작하는 전체적인 흐름을 요약하자면 다음과 같습니다.

 

1. Java Compiler가 Java 파일을 Class 파일로 변환합니다.

2. Class Loader가 Class 파일을 Runtime Data Area 에 적재시킵니다.

3. Execution Engine이 적재된 Class들을 기계어로 변환하여 명령어 단위로 실행(인터프리터)합니다.

(4. Garbage Collector 가 Heap 영역에 적재된 객체들 중 참조되지 않고 있는 객체를 제거해 메모리를 관리합니다.)

 

 

 


 

 

JVM의 동작 방식에 대해 알아봤습니다! 

추후에 Heap 영역과 관련된 Garbage Collection 에 대해 포스팅하겠습니다~

 

감사합니다.

 

 

 

참조:

https://jeong-pro.tistory.com/148

https://webdevtechblog.com/jvm-java-virtual-machine-architecture-94b914e93d86

+ Recent posts