2025-10-04 16:06
Tags: 경영학 소프트웨어 아키텍처
JIT(Just-In-Time)
JIT (Just-In-Time) 컴파일러
- 프로그램 실행 시점에 코드를 기계어로 번역하여 인터프리터의 유연성과 컴파일러의 성능을 모두 잡는 기술이다.
- 프로파일러가 자주 사용되는 ‘핫스팟’ 코드를 식별하면, 이를 최적화된 기계어로 컴파일하여 이후 호출 시에는 빠른 속도로 실행되게 한다.
- 처음에는 인터프리터처럼 코드를 실행하다가,
- 프로그램이 실행되는 동안 실시간 데이터를 수집(프로파일링)하여 자주 사용되는 코드 영역, 즉 ‘핫스팟(Hotspot)‘을 찾아낸다.
- 그리고 바로 그 ‘핫스팟’만을 골라내어 AOT 컴파일러처럼 기계어로 번역한다.
- JIT의 핵심 아이디어: “모든 코드를 미리 최적화하는 것은 낭비다. 가장 많이 실행되는 부분만 집중적으로 최적화하자.”
- 현대의 자바 가상 머신(JVM)이나 자바스크립트 엔진(V8) 등은 JIT 컴파일을 통해 동적 언어의 성능 한계를 극복하고 높은 실행 속도를 달성한다.
| 항목 | JIT (Just-In-Time) | AOT (Ahead-of-Time) |
|---|---|---|
| 컴파일 시점 | 프로그램 실행 중 (Runtime) | 프로그램 실행 전 (Build time) |
| 최대 성능 | 런타임 정보를 활용한 최적화로 더 높은 성능에 도달할 잠재력 있음 | 런타임 정보가 없어 한계가 있지만, 초기 성능은 빠름 |
| 시작 시간 | 인터프리터 실행, 프로파일링, 컴파일 등으로 초기에는 느림 (워밍업 필요) | 이미 컴파일된 코드를 바로 로드하므로 시작이 매우 빠름 |
| 메모리 사용량 | 프로파일링 정보, 여러 계층의 컴파일된 코드 등으로 더 많은 메모리 사용 | 필요한 코드만 담고 있으므로 상대적으로 메모리 사용량이 적음 |
| 플랫폼 독립성 | 높음 (바이트코드 등 중간 언어 기반) | 낮음 (특정 OS와 CPU 아키텍처에 종속) |
| 대표 주자 | Java (JVM), JavaScript (V8), C# (.NET) | C, C++, Go, Rust, Swift |