반응형
JIT 컴파일러를 공부하다보니, AOT 컴파일러 또한 공부를 해보려 합니다.
AOT 컴파일러란?
AOT(Ahead-Of-Time) 컴파일러는 프로그램 실행 전에,
소스 코드나 중간 코드(바이트코드)를 미리 기계어로 컴파일하는 방식입니다.
즉, 실행 전에 컴파일을 모두 완료하므로, 실행 시점에서는 번역 없이 바로 실행 가능한 상태가 됩니다.
AOT 컴파일러의 동작 과정
- 소스 코드 작성:
- 개발자가 작성한 고급 언어 코드(C, C++, Java 등)를 작성합니다.
- AOT 컴파일:
- 소스 코드를 특정 플랫폼의 기계어로 변환하여 실행 가능한 바이너리 파일을 생성합니다.
- 예: .exe, .elf, .bin 같은 파일.
- 실행:
- 컴파일된 바이너리 파일은 직접 운영체제와 하드웨어에서 실행됩니다.
AOT 컴파일러의 장단점
장점:
- 빠른 실행 속도:
- 이미 기계어로 변환되어 있어, 실행 시 추가적인 번역이 필요 없습니다.
- 배포 편리성:
- 실행 가능한 바이너리 파일을 배포하므로, 특정 환경에서 별도의 컴파일이 필요 없습니다.
- 저전력 및 저자원 사용:
- JIT 컴파일러처럼 실행 중에 컴파일하지 않아도 되므로, CPU와 메모리 사용량이 적습니다.
단점:
- 플랫폼 종속성:
- AOT 컴파일된 프로그램은 특정 운영체제와 하드웨어에서만 실행 가능합니다.
- 예: Windows용 바이너리는 macOS에서 실행할 수 없습니다.
- 최적화 한계:
- 실행 중의 동적 정보를 활용하지 못하므로, 런타임 최적화(JIT에서 제공)가 부족합니다.
- 초기 컴파일 시간 증가:
- 실행 전에 모든 코드를 미리 컴파일하므로 초기 빌드 시간이 길어질 수 있습니다.
AOT 컴파일러의 실제 예
1. C/C++ 컴파일러
- 대표적인 AOT 컴파일러입니다.
- 예: gcc, clang.
- 소스 코드를 실행 전에 컴파일하여 플랫폼에 맞는 기계어 파일을 생성합니다.
- 결과물: .exe(Windows), .out(Linux).
2. Java의 GraalVM (AOT 컴파일 모드)
- GraalVM은 Java 바이트코드를 실행하기 전에 네이티브 실행 파일로 변환합니다.
- 결과물은 네이티브 바이너리이며, JIT보다 빠르게 실행됩니다.
3. Android NDK
- 안드로이드 앱의 일부 네이티브 코드(C/C++)를 AOT로 컴파일하여 실행 성능을 향상시킵니다.
4. Rust
- Rust는 AOT 컴파일을 사용하는 시스템 프로그래밍 언어로, 실행 가능한 바이너리를 생성합니다.
AOT 컴파일러와 Java
Java는 기본적으로 JIT 컴파일러를 사용하지만, 일부 상황에서는 AOT 컴파일러를 사용할 수 있습니다:
- GraalVM Native Image:
- Java 애플리케이션을 네이티브 바이너리로 컴파일하여 실행 속도를 높이고, 메모리 사용량을 줄입니다.
- 이점:
- 빠른 실행 속도.
- 시작 시간(Start-up Time) 감소.
반응형
'Computer Science' 카테고리의 다른 글
[CS] SSL과 TLS란? (0) | 2024.08.22 |
---|---|
[CS(OS)] Heap과 Stack메모리에 대하여 (0) | 2024.08.16 |