[기술 정리] AOT와 JIT

lhs's avatar
Nov 23, 2024
[기술 정리] AOT와 JIT
 

1. AOT (Ahead-of-Time) 컴파일

💡
실행 전에 코드를 미리 컴파일하는 방식

정의

프로그램이 실행되기 전에 소스 코드나 중간 코드를 미리 컴파일하여 실행 파일이나 네이티브 코드로 변환하는 방식이다. 즉, 실행 전에 모든 코드가 미리 컴파일되며, 실행 시에는 이미 컴파일된 코드만 사용한다.

장점

  • 빠른 실행 속도: 프로그램 실행 전에 이미 컴파일이 완료되므로 실행 시 추가적인 컴파일이 필요 없어 실행 시간이 빠르다.
  • 초기 로딩 속도 향상: 실행 시점에서 컴파일하지 않으므로 초기 로딩 시간이 짧다.
  • 배포 후 최적화: 미리 최적화된 코드를 배포하므로 배포 후 성능 최적화가 가능하다.

단점

  • 컴파일 시간이 길어짐: 실행 전에 전체 코드를 미리 컴파일해야 하므로 빌드 시간이 길어질 수 있다.
  • 런타임 최적화 부족: 실행 중에 환경에 맞춰 최적화를 할 수 없기 때문에 런타임 성능을 최적화하기 어렵다.

2. JIT (Just-in-Time) 컴파일

💡
실행 중에 필요한 코드만 컴파일하는 방식

정의

프로그램이 실행될 때 실행되는 코드만 동적으로 컴파일하는 방식이다. 즉, 코드가 실제로 실행될 때마다 필요한 부분만 컴파일하여 최적화된 머신 코드로 변환하고 실행한다.

장점

  • 런타임 최적화: 실제 실행 환경에 맞춰 동적으로 최적화를 할 수 있어 성능을 최적화할 수 있다.
  • 반복 실행 성능 향상: 실행 중에 자주 사용되는 코드가 최적화되어 성능이 향상된다.

단점

  • 초기 실행 지연: 실행 중에 컴파일이 이루어지므로 처음 실행할 때 성능 저하가 발생할 수 있다.
  • 메모리 사용 증가: JIT 컴파일 과정에서 추가적인 메모리 사용이 필요하며, 컴파일된 코드와 메타데이터를 저장해야 한다.

3. AOT와 JIT의 차이점

특징
AOT (Ahead-of-Time)
JIT (Just-in-Time)
컴파일 시점
프로그램 실행 전에 미리 컴파일
실행 중에 코드가 실행될 때 동적으로 컴파일
실행 속도
실행 속도가 빠르다 (컴파일이 완료된 상태에서 실행)
처음 실행 시 성능 저하, 이후 최적화되면서 빠른 실행
초기 로딩 속도
빠르다 (이미 컴파일된 상태)
느릴 수 있다 (실행 중 컴파일)
런타임 최적화
불가능 (실행 환경에 맞춘 최적화 불가)
가능 (실행 환경에 맞춰 최적화)
컴파일 시간
컴파일 시간이 길어질 수 있다
컴파일 시간이 실행 중에 분산됨
메모리 사용
상대적으로 적음
컴파일된 코드와 메타데이터로 인해 메모리 사용량 증가
Share article

LHS's Study Space