JIT(Just-In-Time) 컴파일러
프로그램이 실행 중일때, 바이트 코드를 네이티브 코드로 컴파일하는 컴파일러
주요 작업
- Hotspot(자주 실행되는 코드)을 탐지
- 최적화 수준 결정
- 최적화 및 컴파일
- 네이티브 코드 생성
- 캐싱 : 네이티브 코드를 캐싱하여 재사용
AOT(Ahead-Of-Time) 컴파일러
프로그램이 실행되기 전에, 바이트 코드를 네이티브 코드로 컴파일하는 컴파일러
- 인터프리터 방식 X, 컴파일 방식 O
- 실행 속도가 빠름
- GraalVM을 사용하면 Java 프로그램을 AOT 컴파일 가능
GraalVM
오라클에서 개발한 JVM 기반의 다양한 언어를 지원하는 통합 실행 환경 (JVM, JDK)
장점
- 멀티 언어 지원
- AOT 컴파일 지원
단점
- 초기 설정이 복잡함
- 빌드 속도가 느림
JIT vs AOT
구분 | JIT | AOT |
---|---|---|
컴파일 시점 | 프로그램 실행 중 | 프로그램 실행 전 |
컴파일 대상 | Hotspot(자주 실행되는 코드만) | 전체 코드 |
컴파일 속도 | 상대적으로 느림 | 상대적으로 빠름 |
실행 속도 | 초기에는 느림(컴파일 시간 소요) | 초기부터 빠름 |
메모리 사용량 | 상대적으로 적음 | 더 많이 소모될 수 있음 |
초기 부팅 시간 | 상대적으로 느림 | 빠름 |