컴파일러와 인터프리터는 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 과정에 관여하는 프로그램이다.
[참고]
기계어 코드는 컴퓨터 프로세서가 직접 이해하고 실행할 수 있는, 가장 기본적인 형태의 명령어 집합이다. 이러한 코드는 0과 1, 즉 이진수로 표현되며, 컴퓨터의 중앙 처리 장치가 직접 실행할 수 있는 유일한 언어이자 가장 낮은 수준의 언어이며 이는 기계어가 컴퓨터 하드웨어와 직접적으로 소통할 수 있는 언어이다.
[참고] 컴파일과정
고수준의 소스코드를 전처리, 컴파일러, 어셈블러, 링커의 과정을 거쳐 저수준언어로 만들고 실행할 수 있는 프로그램을 만드는 과정
컴파일러와 인터프리터 모두 고수준의 언어를 기계어로 변환한다는 공통점이 있다.
JIT 컴파일러는 인터프리터와 컴파일러의 중간 형태이다.
1. 코드 분석 : 실행 시점에 프로그램 코드를 분석하여, 어떤 부분이 가장 자주 실행되는지(hot spot) 판단. (실행 전 분석 X)
2. 동적 컴파일 : 분석 결과에 기반하여, 자주 실행되는 코드(Hot Spot)만을 선별적으로 기계어로 변환. 이 과정은 프로그램 실행 중에 실시간으로 이루어진다.
3. 최적화 : 컴파일 과정에서 다양한 최적화 기법을 적용한다. (ex 메모리 접근 패턴 분석, 가비지 컬렉션의 오버헤드 최소화 등)
4. 실행 : 컴파일된 기계어 코드를 실행한다. 프로그램이 계속 실행되면서 새로운 핫 스팟이 발견되면, 해당 부분도 JIT 컴파일을 통해 최적화된다.
ex) JVM, .NET, V8(node.js 엔진)