
Dalvik과 ART는 안드로이드에서 실행되는 애플리케이션의 런타임 환경(Runtime Environment)을 의미합니다.
안드로이드 계층 중 런타임 계층

에서도 ART를 확인할 수 있습니다
과거 구글은 많은 유저층이 사용하는Java를 활용해 앱 개발을 지원하였고, 라이센스 문제와 메모리 효율성 문제로 JVM환경을 활용하는 것이 아니라 Dalvik VM을 활용하였습니다.
Dalbik이란?
Dalbik은Api버전 2.1부터 5.1까지 사용되었던 런타임 환경입니다.
JIT(Just In Time)컴파일러를 사용합니다. 이는 실행되는 시점에 필요한 코드만 컴파일하여 실행하는 방식입니다. 따라서 런타임 중에 컴파일을 진행하여 런타임이 느리게 동작할 수 있습니다. (화면 전환, 앱 실행될 떄 마다 코드를 컴파일합니다.)
ART이란?
ART는Android 4.4부터 현재까지 적용되는 런타임 환경입니다.
AOT(Ahead Of Time) 컴파일러를 사용합니다. 이는 어플리케이션이 설치되는 시점에 코드를 컴파일 하고 미리 캐시하여 실행하는 방식입니다. 이러한 방식으로 어플리케이션 실행 속도가 빠릅니다.
Machine Code로 컴파일하여 앱 패키지 안에 저장합니다.(AOT파일)JIT의 지연시간이 없습니다.odex, elf파일등을 모두 모은 aot파일을 저장하기 때문에 용량이 큽니다.
Dalbik과 ART둘 다 기본상태는 Dex파일이며 이를 기계어 코드로 변환하는 데에 있어 차이점은 다음과 같습니다.
DEX파일이 무엇인지는 DEX 파일이란??을 참고하기
.dex 파일을 dexopt 툴을 이용해 .odex 파일로 변형한 뒤 DVM에서 JIT 컴파일러로 .odex 파일을 기계어로 번역합니다. 변환된 기계어는 RAM에 올려지어 사용됩니다.
.dex 파일을 dex2oat 툴을 이용해 .dex -> .odex -> .oat 파일로 변형한 뒤 OAT 컴파일러로 .oat 파일을 기계어로 번역합니다.
.oat 파일은 .dex 파일 + .odex 파일 + elf 파일(실행 파일) 형식의 기계어를 포함하고 있습니다. (용량이 큽니다.)
.odex파일은 optimized dex 파일의 약자로 특정 기기에 최적화된 코드로 다른 기기에서 사용할 수 없는 특징을 가집니다.
Android Nugat(7.0) 버전 이후에는 ART에 AOT와 더불어 JIT 컴파일러까지 탑재하여 혼용으로 사용합니다.
최초 설치시에는 JIT를 사용하여 설치 속도를 높이고 차후 자주 사용되는 앱의 컴파일을 조금씩 하여 AOT 방식으로 전환합니다.
https://jennysgap.tistory.com/entry/%EC%95%B1%EB%B6%84%EC%84%9D-02-Dalvik-VM-vs-ART-VM