정의
JIT(Just-In-Time) 컴파일러는 두 가지의 방식을 혼합한 방식으로 생각할 수 있는데, 실행 시점에서 인터프리트 방식으로 기계어 코드를 생성하면서 그 코드를 캐싱하여, 같은 함수가 여러 번 불릴 때 매번 기계어 코드를 생성하는 것을 방지한다.
JVM에서 자바 프로그램코드를 기계어로 변환하는 과정
자바 프로그램코드 -> 바이트코드 -> 바이트코드 실행시에 JIT 컴파일 수행 -> 기계어
설명
- 바이트 코드는 기계어는 아니지만 가상 머신에 의해 기계어로 손쉽게 변환할 수 있는 코드다.
- JIT 컴파일러는 바이트 코드를 읽어 빠른속도로 기계어를 생성한다. ( 코드가 실행되는 과정에서 실시간으로 진행 됨 )
- JIT 컴파일러는 전체 코드의 필요한 부분만 변환한다.
- 불필요한 부분은 캐싱으로 처리하기 때문에 재번역하는 일이 없다.
- 일반적인 인터프러터 언어(예시: cpython)는 바이트코드나 소스코드를 최적화 과정이 없이 번역하기 때문에 성능이 낮다.
- 반면 정적으로 컴파일하는 언어(예시: c 언어)는 실행 전에 무조건 컴파일을 해야하기 때문에 다양한 플랫폼에 맞게 컴파일을 하려면 시간이 오래 걸린다.