실행엔진(Execution Engine)은 클래스 로더에 의해 JVM으로 로드된 자바 바이트 코드들을 기계어로 변환시켜 명령어 단위로 실행하는 역할을 한다.
플랫폼 독립성을 위해 바이트 코드를 해당 운영체제에 맞게 해석한다.
실행엔진의 명령어 수행방식은 두 가지 방식이 있다.
인터프리터의 단점을 보완하기 위한 것으로 도입되었다.
컴파일된 코드를 캐싱하여 같은 코드가 존재한다면, 컴파일 하지 않고 캐싱되어 있는 값을 사용한다.
하지만, JIT 컴파일러의 컴파일 과정은 인터프리터 보다 느리기 때문에 항상 JIT컴파일러만을 사용하는 것은 아니다.
따라서 인터프리터 방식으로 실행되면서 해당 메서드가 얼마나 자주 수행되는지 체크하고 컴파일 임계치를 충족하면 컴파일을 수행한다.
JIT컴파일러와 반대로 자바 바이트 코드를 한줄씩 기계어로 변환하여 실행한다.