AOT 컴파일
AOT 컴파일(ahead-of-time compile)은 목표 시스템의 기계어와 무관하게 중간 언어 형태로 배포된 후 목표 시스템에서 인터프리터나 JIT 컴파일 등 기계어 번역을 통해 실행되는 중간 언어를 미리 목표 시스템에 맞는 기계어로 번역하는 방식을 지칭한다. 이런 중간 언어로는 자바 바이트코드, 공통 중간 언어(Common Intermediate Language), IBM System/38 혹은 IBM System i의 기술 독립적 머신 인터페이스(Technology Independent Machine Interface)가 있으며 학계에서도 마이클 프란즈(Michael Franz)[1]가 제안해 오베론 시스템의 일부 구현에서 사용된 슬림 바이너리(Slim Binaries)와 같은 제안이 있었다.
일반적으로 중간 언어를 사용하는 시스템은 실행 시간에 JIT 컴파일과 같은 기법을 통해 실행 시에만 얻을 수 있는 프로그램 분석 정보를 사용하여 높은 성능을 달성할 수 있다. 특히 객체 지향 언어나 스크립트 언어 같이 동적인 언어인 경우 효과적이다. 하지만 실행 시 프로그램 분석과 컴파일을 함께 수행하는데 추가 메모리 및 CPU 사이클이 필요한 단점이 있다. 따라서 AOT 컴파일은 이에 대한 보완책으로 사용되고 있다.
응용 범위
편집- 메모리 및 CPU 제약이 있는 경우: 인터프리터는 너무 느리고 JIT 컴파일은 너무 부담이 큰 경우로 임베디드 시스템인 경우가 많다. 단 이 경우 목표 시스템에 내장 되는 프로그램에 한해서 AOT 컴파일을 하고 내려받는 프로그램은 인터프리터나 JIT 컴파일로 실행하는 경우가 보통이다.
- 프로그램 특성 상 빠른 시작 시간과 일관된 성능이 중요한 경우: 데스크톱 환경에서 그래픽 사용자 인터페이스 위주의 프로그램인 경우가 이에 해당 한다.
- 전통적인 컴파일러 최적화가 효과적인 경우: 계산이 많은 프로그램처럼 일반 컴파일을 통한 최적화가 효과적인 경우에 사용할 수 있다. AOT 컴파일은 소스 코드 대신 중간 언어를 받아 들인다는 점을 빼면 일반적인 정적 컴파일과 동일하기 때문에 실행 시간에 비해 충분한 프로그램 분석을 통해 최적화를 보여준다.
구현
편집자바
편집- GNU 자바 컴파일러[2]: GNU 컴파일러에 자바 전단부(front-end)를 넣어서 자바 코드를 실행 코드로 컴파일한다.
- Excelsior JET[3]: 자바를 위한 상용 AOT 컴파일러 제품
.NET CLR
편집같이 보기
편집각주
편집이 글은 컴퓨터 과학에 관한 토막글입니다. 여러분의 지식으로 알차게 문서를 완성해 갑시다. |