실행 엔진은 JVM 머신의 핵심 구성요소다.
가상 머신(VM)은 물리 머신에 상대적인 개념인데 두 머신 모두 코드를 실행하는 기능을 한다.
물리 머신은 프로세서, 캐시, 명령어 집합, OS 수준에서 직접 구현되는 반면 가상 머신은 순수하게 소프트웨어로만 구현된다. → 물리적 제약(하드웨어 제약) 없이 명령어들을 실행할 수 있다는 것이다.
JVM 명세를 통해 바이트코드 실행 엔진의 개념 모델이 정의되어 있고, 이 구현체들이 해석 실행(인터프리터)과 컴파일 실행(JIT 컴파일러로 네이티브 코드 생성 후 실행) 중 하나의 방법을 사용해 코드를 실행한다. 이 중 어떤 방식을 쓰더라도 똑같은 입력에는 똑같은 출력이 나온다.
JVM은 메서드를 가장 기본적인 실행 단위로 사용한다. 메서드 호출과 실행을 뒷받침하는 내부 데이터 구조로는 스택 프레임을 사용한다.
스택 프레임에는 지역 변수 테이블, 피연산자 스택, 동적 링크, 메서드 반환 주소와 몇가지 추가적인 정보가 담겨있다. 또한 스택 프레임에 할당해야할 메모리의 크기는 런타임에 영향 받지 않고 소스 코드와 JVM 구현의 스택 메모리 레이아웃에 달려있다.
스레드의 메서드 호출 체인은 길 수 있지만 실행 엔진 관점에서는 스택 맨 위에 프레임만 현재 메서드로 취급한다.
지역 변수 테이블은 메서드 매개 변수와 메서드 안에 정의된 지역 변수를 저장하는 공간이다.
지역 변수 테이블의 용량 기준은 가장 작은 단위인 변수 슬롯이다. 변수 슬롯이 차지하는 메모리 공간의 크기를 JVM 명세에 정의하진 않았지만 기본 타입(boolean, float, char 등등)과 참조타입 등을 지정할 수 있어야한다고 되어있고, 32bit (or 64bit) 로 구현하는게 일반적이다.