JVM의 구성요소 중에 Execution Engine에 해당하는 내용을 살펴보도록 하겠다
- Execution Engine이란
- Execution Engine의 구성요소
- Interpreter
- JIT(Just In Time) Compiler
- Garbage Collector
Execution Engine이란
JVM은 Java 컴파일러가 컴파일한 ByteCode를 ClassLoader를 이용해 메모리(RuntimeDataArea)에 실행 가능한 상태로 적재한다.
Execution Engine은 메모리(RuntimeDataArea)에 할당된 byteCode를 실행하는 역할을 담당한다.
ByteCode는 human-readable형태로 나타내어진다, 그러므로 Execution Engine을 통해서 Machine이 읽을 수 있는 형태로 ByteCode를 변환해 주어야 한다.
Execution Engine은 ByteCode를 한 줄 마다 읽으며 변환하는 작업을 거친다.
( CPU가 command를 실행하는 방식과 유사하게 동작)
( 각 command의 ByteCode의 구성은 1byte의 OpCode와 추가적인 Operand로 구성되었다)
다만, Execution Engine이 어떠한 형태로 실행되여야 하는지는 JVM specification에 나타나지 않아, 해당 구현은 vendor에 따라 달라질 수 있다.
Execution Engine의 구성요소
Interpreter
ByteCode를 기계가 이해할 수 있도록 Native Code로 바꾸는 작업을 한다
ByteCode 한 줄마다 컴파일을 하여 Native로 변환하는 작업을 하게 되는데 중복되는 Byte Code들에 대해서도 매번 컴파일을 하게 되면 비효율적이며 Running Time도 길어지게 된다
이러한 중복되는 Byte Code에 대해서는 JIT 컴파일러를 사용한다.
JIT(Just In Time) Compiler
Interpreter 효율을 높히기 위해 Interpreter가 반복되는 코드를 발견하면 JIT 컴파일러로 반복되는 코드를 모두 Native Code로 바꾼다.
그렇게 되면 반복된 Byte Code는 Native Code로 바뀌어 있기 때문에 Interpreter가 바로 사용할 수 있게 된다.
Garbage Collector
RuntimeDataArea의 Heap 영역의 더 이상 참조되지 않는 객체를 정리한다
이에 대한 내역은 Garbage Collector를 자세히 다루는 포스팅으로 소개하도록 하겠다.
'Java' 카테고리의 다른 글
[JAVA] Java Stream (스트림) API (0) | 2020.12.31 |
---|---|
[JAVA] Java8 함수형 인터페이스 (Functional Interface) (0) | 2020.12.24 |
[JAVA] Java8 Lambda Expressions ( 람다식, 람다 표현식 ) (0) | 2020.12.23 |
[JAVA] Java GC ( Garbage Collection ) (0) | 2020.11.26 |
[JAVA] 날짜관련 Class 정리 ( Date, LocalDateTime..) (0) | 2020.11.24 |