JIT 컴파일러와 AOT 컴파일러

🏷️ java 🏷️ cs

수정일 : 2024-12-16


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(자주 실행되는 코드만) 전체 코드
컴파일 속도 상대적으로 느림 상대적으로 빠름
실행 속도 초기에는 느림(컴파일 시간 소요) 초기부터 빠름
메모리 사용량 상대적으로 적음 더 많이 소모될 수 있음
초기 부팅 시간 상대적으로 느림 빠름