여기서는 최대한 기본적인 개념에 대해서만 알아보고 비교하는 부분을 정리할 것이고, 그 이상의 부분은 출처만을 남겨놓을 예정입니다.
컴파일러, 인터프리터는 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램으로 생각하면 됩니다.
JIT 컴파일은 프로그램이라기 보다는 컴파일 기법이라고 생각하면 됩니다.
먼저, 전통적인 방식의 번역기인 두가 가지를 살펴볼 것이다.
❗ 정적 컴파일 방식을 사용하는 언어 번역 프로그램
❗ 실행하기 전에 프로그램 코드(원시 코드)를 기계어와 같은 목적 코드로 번역
⚡ 고급프로그래밍 언어 vs 저급프로그래밍 언어 ⚡
👉 고급 프로그래밍 언어
- 사람이 이해하기 쉽게 작성된 프로그래밍 언어
- C, Java, ..., 등등
- 추상화 수준이 높을수록 높은 수준의 언어
- 장점
- 가독성이 높다.
- 유지 보수가 간단.
- 단점
- 느린 속도
👉 저급 프로그래밍 언어
- 컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어
- 일반적으로 기계어나 어셈블리어를 일컫음
- 장점
- 실행 속도가 매우 빠르다.
- 단점
- 배우기 어려움
- 유지 보수가 힘듬
❗ 인터프리터 방식을 사용하여 소스 코드를 바로 실행하는 프로그램
❗ 실행 중 프로그래밍 언어를 한줄 씩 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행
만약, 메모리 크기가 큰 소스 코드에서 수정이 빈번하게 일어나는 경우에는 무슨 방식이 유리할까?
컴파일의 경우 컴파일이 반복적으로 이루어지며 컴파일 속도가 오래 걸리기 때문에 인터프리터가 유리합니다.
❗ JIT컴파일(Just-In-Time Compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법입니다.
👉 JIT 컴파일러는 정적 컴파일 방식 + 인터프리터 방식이라고 생각할 수 있습니다.
👉 자바의 경우 다음 순서를 거칩니다.
👉 JIT의 장점
- 기존의 방식들 보다 나은 점: 실행 과정에서 필요한만큼만 컴파일합니다.
- 인터프리터 방식은 소스코드를 최적화 과정이 없이 번역하기 때문에 성능이 낮음
- 정적 컴파일언어는 실행 전에 무조건 컴파일 했기 때문에, 다양한 플랫폼에 맞게 컴파일 하기 위해 많은 시간 소요
- 일반적으로는 인터프리터에 비해 빠른 수준이며, 경우에 따라 정적 컴파일러보다 빠르기도 합니다.
- 중복된 소스 코드가 많은 경우에 인터프리터보다 빠릅니다.
- 소스 코드의 변화가 많은 경우 정적 컴파일러보다 빠를 수도 있지만, 거의 정적 컴파일러가 빠르다고 보는것이 많다고 생각합니다.
Reference