안드로이드

Android Dalvik & ART 차이

코딩하는후운 2021. 3. 29. 14:00
반응형

Dalvik VM과 Java VM의 컴파일 과정 비교

  • DVM과 JVM은 모두 JIT(=Just In Time) 컴파일러를 사용해 기계어로 번역한다.
  • JVM에서는 .jar 파일을 기계어로 번역할 수 있기 때문에 .class 파일을 .jar 파일로 번역하는 작업이 필요한 것 처럼(.class 파일을 .dex 파일로 번역하는 작업은 Android SDK에 포함되어 있는 dx 툴을 이용한다.)
    DVM에서는 .dex 파일을 기계어로 번역할 수 있기 때문에 .class 파일을 .dex 파일로 번역하는 작업이 필요하다.

 

Dalvik VM의 컴파일 방식

위에서 말했듯이 Dalvik VM의 컴파일 방식은 JIT(=Just In Time) 방식이다. 

  • 이 방식은 앱 구동 중에 실시간으로 컴파일(기계어 번역)을 하기 때문에 설치 시 속도가 빠르지만 실행 시에 느리다는 단점이 있었다. 또한 번역한 정보를 메모리에 올려서 메모리 부하가 컸다.
  • 그러다가 안드로이드 2.2 (Froyo) 버전 이후 Trace JIT 방식을 사용한다.

 

ART(=Android Runtime)의 컴파일 방식

ART는 기계어로 해석된 앱을 실행시키기 위해 런타임 시 사용되는 라이브러리로, Android Kitkat 버전에서 처음 등장하여 Android 5.0 Lollipop 버전 이후 무조건 ART를 적용하였다. Dalvik VM의 JIT 컴파일 방식의 단점을 보완하기 위해 만들어졌다.

 

ART는 컴파일 시 AOT(=Ahead Of Time) 방식을 사용한다. 

  • 설치 시에 컴파일을 하기 때문에 설치 속도가 느리지만 실행 속도가 빠르고 실행 도중에 컴파일 하지 않아 CPU 사용이 줄어 배터리 수명이 향상되었다.
  • 번역 정보를 파일에 저장하기 때문에 설치 용량이 많이 필요해진다.
  • 설치 시점에 기계어 번역을 완료하기 때문에 인터프리터 방식을 사용하는 Dalvik VM이 필요 없어졌다.

 

컴파일러와 인터프리터 차이

Compiler: 런타임 전에 컴파일 수행

    - 빠른 실행 속도, 플랫폼 종속적, 디스크 공간 활용

 

Interpreter: 런타임 시 컴파일 수행

    - 비교적 실행속도 느림, 코드 변경 즉시 실행 가능

 

 

 

Dalvik 방식에서는 .dex 파일을 dexopt 툴을 이용해 .odex 파일로 변형한 뒤 DVM에서 JIT 컴파일러로 .odex 파일을 기계어로 번역한다.

ART 방식에서는 .dex 파일을 dex2oat 툴을 이용해 .dex -> .odex -> .oat 파일로 변형한 뒤 OAT 컴파일러로 .oat 파일을 기계어로 번역한다.

 

ART = JIT + AOT

Android Nugat 버전 이후에는 ART에 AOT와 더불어 JIT 컴파일러까지 탑재했다. 

설치 시에는 JIT 방식으로 설치 용량을 줄이고 설치 속도를 높였고, 차후에 상황에 따라 각 방식을 유연하게 적용하면서 AOT의 단점을 해결했다.

 

 

출처 : 

s2choco.tistory.com/16

반응형

'안드로이드' 카테고리의 다른 글

Wildcard(*) import 방지  (0) 2021.05.03
Gradle Dependency 관리하기 (buildSrc)  (0) 2021.04.02
Android Context란?  (0) 2021.03.29
MVC, MVP, MVVM 장단점  (0) 2021.03.28
RxKotlin, RxAndroid란?  (0) 2021.03.26