반응형
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의 단점을 해결했다.
출처 :
반응형
'안드로이드' 카테고리의 다른 글
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 |