1. JIT(Just In Time)
JIT 컴파일은 프로그램의 컴파일 과정이 런타임시에 진행된다. 때문에 조기에 틀린 부분에 대한 검증을 진행할 수 없고 반드시 컴파일러가 포함된상태로 배포되어야 한다.
(만약 오류 발생 시 실행되지 않음)
JIT은 Java 개발에 주로 사용되는 컴파일러로 보통 Byte Code를 기계어로 변환할 때 사용한다.
2. AOT(Ahead of Time)
조기에 컴파일을 진행한 후 배포되어 실행된다. 이로 인해 컴파일러를 따로 첨가할 필요가 없어 사이즈도 적으며 프로그램을 실행하는 속도 등이 빠르다.
(동적 변수 사용이 불가)
3. 안드로이드 컴파일러
기본적으로 안드로이드 APK파일은 DEX파일로 사용됩니다. DEX파일은 경량화된 파일로 안드로이드 OS에 최적화된 부분입니다.
이러한 DEX파일을 컴파일러를 통해 기계어로 바꾸어 프로그램을 실행하게 됩니다. 컴파일 과정은 아래와 같습니다.
1) Dalvik
안드로이드 초기 버전의 컴파일 방법으로 JIT 컴파일 방식을 사용 한다.
하지만 JIT type의 달빅은 Framework 및 캐시에 많은 사이즈로 부담이 발생하고 실행 시 컴파일을 진행하므로 실행속도의 저하 등의 문제가 발생합니다.
2) ART
ART는 AOT방식의 컴파일로 안드로이드는 Dalvik에서 해당 방식의 컴파일로 변경을 진행합니다.
그리고 Android N 이후 JIT을 추가하여 ART & JIT형태로 진행합니다. 이 후 가비지 컬렉션등의 이슈를 최적화하기 위해 Android O 에서 해당 부분의 소스 최적화를 진행 합니다.
결과적으로 DEX 파일은 JIT으로 혹은 ZIP 형태로 압축을 진행하여 ART를 통해 기계어로의 변환을 진행합니다.
'Android > 안드로이드 운영체제' 카테고리의 다른 글
[Android] 안드로이드(6) - Biometric (0) | 2020.11.01 |
---|---|
[Android] 안드로이드(5) - HAL (2) | 2020.10.25 |
[Android] 안드로이드(4) - 부팅2, Zygote (0) | 2020.10.19 |
[Android] 안드로이드(3) - 부팅 (0) | 2020.10.10 |
[Android] 안드로이드(1) - 구조 (0) | 2020.10.04 |