728x90
반응형

Execution Engine(실행 엔진)이란 메모리(Runtime Area Data in Method Area)에 올라가있는 .class파일을 읽어서 코드를 실행시키는 것을 말한다.

Execution Engine은 크게 JIT, Java Interpreter로 구성되어있다.

Interpreter란?

Interpreter란 소스 코드를 한줄씩 읽음과 동시에 번역을 하여 코드를 실행시키는 것을 의미한다.

즉, 미리 번역을 하지 않고 동시 통역을 한다고 생각하면 편할 듯 싶다.

실행 시간에는 소스코드가 크던 작던 큰 차이가 없지만, 실행 속도 자체는 Complier를 지원하는 언어보다 느리다.

대표적인 언어는 python, JavaScript가 존재한다.

Complier란?

Complier란 모든 소스 코드를 한번에 번역을 해 놓은 후, 실행시키는 것을 의미한다.

따라서 미리 번역을 통째로 진행해야 하므로 컴파일 시간이 존재하며, 소스 코드가 크다면 그 시간이 오래 걸리게 된다.

하지만 한번 번역을 끝낸다면, 번역 시간이 필요하지 않으므로 Interpreter 언어보다 실행 속도가 빠르다.

대표적인 언어로는 C, C++, Go가 존재한다.


Java는 위 언어의 특징들을 동시에 사용하는 언어이다. 즉, Complier와 Interpreter를 둘다 사용하고 있다. Complier는 크게 Javac(Java Complier), JIT(Just In Time Complier)가 존재하며, Interpreter는 Java Interpreter가 존재한다.

Javac는 Execution Engine에 포함되어 있지 않으므로, JVM에서 다루게 된다.

Java Interpreter

Java Interpreter는 Runtime Data Area Method 영역에 존재하는 .class파일을 읽어서 Machine Code로 번역해준다.

이렇게 번역된 코드를 저장하는 것이 아니기에 매번 다시 그 메서드를 호출하여도 다시 Interpreter가 번역해야 한다.

JIT

JIT(Just In Time Complier)는 동적으로 .class파일을 Native Code로 번역하여 JVM의 Cache 부분에 저장한다.

일정부분 같은 메서드나 함수가 호출된다면 JIT가 그 함수를 번역하여 저장한다면 Interpreter가 다시 와서 번역하지 않고 JVM이 바로 그 코드를 실행시킬 수 있게 되는 것이다.


즉, Java는 Interpreter와 JIT를 활용하여 Interpreter의 성능 이슈를 해결한 언어이다.

Java Execution Engine이 동작하는 방식을 그림으로 표현하면 다음과 같다.

Execution Engine

참고자료

https://velog.io/@itonse/Java-%EC%8B%A4%ED%96%89-%EC%97%94%EC%A7%84Execution-Engine

 

Java - 실행 엔진(Execution Engine)

Execution Engine이란? 클래스로더에 의해 JVM으로 로드된 클래스 파일(바이트 코드로 된 .class파일)들은 런타임 데이터 영역의 메서드 영역에 배치되는데, JVM은 메서드 영역의 바이트 코드를 Execution E

velog.io

https://junhyunny.github.io/information/java/jvm-execution-engine/

 

JVM 실행 엔진(Execution Engine)

<br /><br />

junhyunny.github.io

https://ssdragon.tistory.com/28

 

JVM(자바가상머신)이란? - Part 2, Execution Engine

JVM(자바가상머신)이란? - Part 1, 소개 자바를 쓰는 개발자라면 누구나 들어봤을 JVM(Java Virtual Machine)을 알아보려고 한다. 자바 바이트코드가 JRE에서 동작을 하는데, 이 JRE에서 가장 중요한 요소는

ssdragon.tistory.com

혹시라도 틀린 내용이 있다면 댓글로 알려주시면 감사하겠습니다!!

728x90
반응형

'Java' 카테고리의 다른 글

[Java] Runtime Data Area란?  (1) 2025.05.26
[Java] Garbage Collection란?  (1) 2025.05.23
[Java] Class Loader란?  (2) 2025.05.21
[Java] JVM이란?  (3) 2025.05.20
Java 람다식, 함수형 프로그래밍  (1) 2024.12.31

+ Recent posts