Owl Life

안드로이드 Dalvik과 ART, JIT과 AOT 차이점 본문

Android Dev/dev

안드로이드 Dalvik과 ART, JIT과 AOT 차이점

Owl Life 2019. 10. 9. 21:01
반응형

apk를 설치하면 실행파일의 경우 storage에 dex 파일로 저장됩니다. dex 파일은 byte code로 이루어져 있기 때문에 이를 실행하려면 단말의 cpu에 맞게 machine code로 변환하여야 합니다. 이 machine code로 프로그램을 실행할 수 있기 때문입니다. 코드 변환에는 비용이 발생하기 때문에 어떤 방식으로 변환하느냐에 따라서 크게 JIT과 AOT로 나뉩니다. 이 두 방식은 안드로이드에 국한되는것이 아니라 다른 Language에서도 사용되는 일반적인 컴파일 방식입니다.

 

■ Dalvik

JIT (Just In Time) 컴파일 방식을 사용합니다.

 

※ JIT의 주요 특징

  • 앱이 실행되는 순간 자주 사용되는 바이트 코드를 컴파일하여 Machine Code로 변환 후 캐싱하여 RAM에 올립니다.

  • 화면 전환 또는 앱이 실행 될 때마다 필요한 코드를 실시간 컴파일 하기 때문에 그 시간만큼 사용성에 있어서 latency가 발생할 수 밖에 없습니다.

  • 컴파일이 빈번하게 발생되기 때문에 RAM 점유율, 배터리 소모량 증가 등의 이슈도 있습니다.

  • 장점으로는, AOT 대비 APP 설치 시간이 매우 빠릅니다. 설치 할때 컴파일을 하지 않기 때문입니다.

  • AOT 대비 앱 용량이 작습니다.



DVM에서의 실행 과정

 

 

 

 

■ ART

AOT(Ahead Of Time) 컴파일 방식을 사용하고 Android Kitkat 버전에 도입된 새로운 앱 실행 환경입니다. JIT의 단점들을 보완하여 큰 성능 향상을 가져왔습니다.

 

※ AOT의 주요 특징

  • Android Kitkat 버전에 도입된 ART (Android Runtime) 에서 사용되는 컴파일 방식입니다.

  • 앱 설치 할때 모든 코드를 Machine Code로 변환 후 ROM에 저장합니다.

  • 앱 설치 속도가 JIT에 비하여 매우 느립니다.

  • 앱 실행시 컴파일을 하지 않아도 되기 때문에 컴파일로 인해 발생될수 있는 latency가 없어서 매우 빠릅니다.

  • 미리 컴파일 후에 ROM에 저장하기 때문에 용량이 큽니다. (JIT 대비 보통 1.5배 ~ 최대 2배)

 

 

최적화 작업으로 인하여 JIT과 AOT가 각각 도입되었다가 Android N 버전부터는 둘다 사용되는 하이브리드 형태로 운용되고 있습니다.

 

ART에서의 실행 과정

 

반응형
Comments