.java
javac
가 컴파일.class
Class Loader
로 자바 바이트 코드가 전달 됨.Runtime Data Area
에 올린다.Execution Engine
은 Class Loader를 통해 Runtime Data Area에 load된 바이트 코드를 명령어 단위로 가져와 실행한다. Execution Engine은 두 가지 방식으로 실행이 된다.interpreter의 방식을 보완하기 위해 개발됨.
interpreter 방식으로 명령어를 실행하다가 적절한 시점에 JIT compiler가 자바 바이트 코드 전체를 Native Code로 컴파일 한다. 이후부터는 Interpreter가 아닌 Native Code를 통해 명령어를 실행하게 된다. Interpreter를 통해 한 줄씩 명령어를 실행하는 것보다 Native Code를 실행하는 것이 더 빠르다. Native Code는 캐시에 보관되기 때문이다.
JIT Compiler를 통해 자바 바이트 코드를 Native Code로 컴파일 하는 과정은 Interpreter를 통해 실행하는 것보다 시간이 많이 소요된다. 따라서 한 번만 호출되는 명령어의 경우는 Interpreter를 통해 실행하는 것이 더 빠르다. 이로 인해 JIT Compiler를 사용하는 JVM들은 명령어가 얼마나 자주 쓰이는 지를 파악해서 일정 수준이 넘어가게 되면 JIT Compiler를 통해 컴파일하게 된다.