본문 바로가기

학습/이해하고 쓰는 작동원리

JVM 작동원리

JVM 은 Java Virtual Machine 의 약자로,

자바를 동작하게 해주는 소프트웨어 이다.

 

(겪어 보지 못한) 다른 이전 언어들은

OS 마다 개발을 달리 해줘야 했다고 한다.

 

그러나 Java 언어 창시자는 OS 마다 개발하기 귀찮았던건지

아주 편리하게 OS 에 상관없이 개발할 수 있게 만들어 줬다.

 

그 역할이 JVM 이 하는 가장 큰 역할이라고 생각한다.

 

JVM 을 살펴보겠다.

 

JVM 은 클래스 파일을 읽는다.

 

Class Loader 클래스 파일을 가져오는 역할을 한다.

 

Execution Engine 은 가져온 클래스 파일을 번역하는 역할을 한다.

 

Runtime Data Areas코드를 진행하여 OS 에 명령을 내리는 역할을 한다.

 

한 단계 더 들어가 보겠다.

 

Execution Engine 은 

Interpreter, JIT Compiler 두 방식으로 나눌 수 있다.

 

Class Loader 가 가져온 클래스 파일( 바이트 코드 )을

기계어로 번역하며 실행하는 Interpreter -> 빠르다.

모아서 한번에 번역하고 캐시로 저장했다가 사용하는 JIT Compiler -> 컴파일 시간이 필요하지만 캐시가 유용함.

 

이 두 방식을 사용하여 기계어로 번역한다.

 

Runtime Data Areas

PC Register, Stack, Native Method Stack, Heap, Method Area 로 나뉜다.

 

PC Register 는 진행 중인 스레드를 제어한다.

Native Method StackJava 코드가 아닌 Native 코드를 저장한다.

Stack 임시로 생성되는 주소, 참조타입이 아닌 원시타입의 값을 저장한다.

이 위의 세 부분은 스레드마다 생성된다.

 

Heap참조타입 값을 저장한다. ( 참조 값은 Stack 에 저장 )

Method Area데이터의 타입, 생성자, 메서드, 필드 등의 값을 저장한다.

이 두 부분은 스레드가 공유한다.

 

1. Java 언어로 코드를 작성한다.

2. javac.exe 가 컴파일 하여 .class (바이트코드) 로 변환한다.

3. class loader 가 .class 파일을 가져온다.

4. execution engine 에서 interpret 방식 또는 JIT Compile 방식을 통하여 기계어로 해석한다.

5. 해석된 데이터를 Runtime Data Areas 에서 분류하여 나눠 갖는다.

'학습 > 이해하고 쓰는 작동원리' 카테고리의 다른 글

가비지 컬렉션 작동 원리  (0) 2021.08.02
웹 서비스 작동원리  (0) 2021.07.19