안녕하세요. TDR입니다.
오늘은 일반적인 컴파일러와 Just-In-Time(JIT) 컴파일러를 비교해 보겠습니다.
우선 각각의 정의를 간단히 알아보면 다음과 같습니다.
Compiler
소스 코드 전체를 읽고 해석하여 중간 코드나 목적 코드로 생성하는 것
JIT Compiler
소스 코드의 일부 또는 전체를 기계 코드로 런타임(실행 중) 생성하는 것
기계 코드(중간 코드 or 목적 코드)를 생성하는 것 자체는 동일합니다. (그게 Compiler의 역할이니)
중요한 것은 "시점"입니다. 이미 잘 아시겠지만, C, C++ 같은 언어는 사전에 소스 코드와 헤더 파일, 라이브러리 등등을 모두 컴파일하여 실행 시점에는 고속으로 실행할 수 있습니다. 반면 Java의 Hotsopt VM이나 .NET의 CLR(공용 언어 런타임)은 JIT Compiler를 사용합니다.
그래서 무슨 차이가 있는가 하면 다음과 같습니다.
Compiler
컴파일 시점에 시간이 많이 걸릴 수 있음
실행 시점에는 최적화된 코드를 실행하기 때문에 빠름
JIT Compiler
애플리케이션의 실행 패턴과 상태를 분석하여 최적화된 코드를 생성
초기 실행 시점에는 컴파일 시간 때문에 느릴 수 있음
즉, 미리 Compiler에 맡겨서 최적화된 코드를 생성할 것이냐, 실행 시점에 실행 환경의 상태를 감안한 최적화된 코드를 생성할 것이냐의 차이입니다. 당연히 위와 같은 특성이 있다보니 어느 한쪽이 무조건 좋다라는건 없습니다. (한쪽이 무조건 좋았으면 2개나 있진 않겠죠?)
실행 환경이 동적 환경에 크게 영향을 받지 않는 애플리케이션이라면, 컴파일 시점에 오버헤드는 있지만 실행 시점에는 고속으로 실행되는 Compiler가 좋습니다.
반면, 동적 환경의 상태를 고려한 기계 코드를 생성하는 것이 최종적으로는 실행 속도에 유리하다면, 처음 실행 될 때는 오버헤드가 있어 실행이 느릴 수는 있으나 이후에는 보다 최적화된 기계 코드로 고속 실행이 가능한 JIT Compiler가 유리할 수 있습니다.
즉, 상황에 맞게 잘 골라서 사용하면 됩니다.
'Versus' 카테고리의 다른 글
[VS] Function vs Method (0) | 2024.03.11 |
---|---|
[VS] Directory vs Folder (0) | 2024.03.09 |
[VS] Parameter vs Argument (1) | 2024.03.08 |
[VS] 양념 vs 다대기 (2) | 2024.02.08 |
[한글] 각출 vs 갹출 (0) | 2024.01.19 |
댓글