안드로이드 플랫폼의 구조 / ART
https://developer.android.com/guide/platform/index.html?hl=ko#art
Android는 모바일 기기를 위한 Linux 기반 커널과 미들웨어, 핵심 애플리케이션들을 포함한 소프트웨어 스택이라고 볼 수 있다.
ART, Android Runtime
```
.class --- DX ---> .dex : Dalvik
.dex -- dex2oat --> .oat : ART
```
안드로이드 5.0 롤리팝(API 21)부터는 Dalvik VM 대신 ART VM을 사용한다.
안드로이드 7.0 누가(API 24) 이후의 ART VM에서는 JIT와 AOT를 모두 사용한다.
최초 설치시에는 JIT를 사용하도록 하여 설치 시간과 용량을 적게 소모하도록 한 뒤, 자주 사용하는 앱일 경우 AOT로 컴파일하는 식이다.
Dalvik VM 방식 : JIT
자바 바이트 코드(`` .class``)를 달빅 바이트 코드(`` .dex``)로 변환해 두고, 이를 런타임에 JIT 컴파일 하며 실행하는 방식.
장점은 여러 `` .class``파일에 있는 중복된 코드를 재사용하기 때문에 용량을 절약할 수 있다는 점.
결국 중간 언어를 실행하는 것이라 JVM처럼 중간 언어를 해석해줄 Dalvik VM이 필요하다.
ART VM 방식 : AOT, Ahead-Of-Time (+ JIT)
AOT는 중간 언어를 받아 Native binary로 컴파일하는 방식. 중간 언어를 받는다는 점만 빼면 소스 코드 컴파일과 같다. 주로 설치 시점에 컴파일한다.
이 경우 `` .dex`` 파일을 `` .oat`` 파일로 컴파일하는 거니까 컴파일에 사용하는 중간 언어는 달빅 바이트 코드.
안드로이드에서는 바이트 코드 바이너리를 둘 다 유지하고 있어 JIT 방식 보다 용량이 더 필요하다는 단점이 있다.
`` .oat`` 파일은 Native machine code로 되어 있기 때문에 VM 없이 실행 가능하지만 Dalvik과의 하위 호환성을 제공해야 하기 때문에 VM 위에서 돌아가는 것 처럼 실행된다.
Java 8 지원
'Java Stack > Android' 카테고리의 다른 글
onClick in XML vs. onClickListener (0) | 2017.12.29 |
---|---|
Android Permission 정리 (0) | 2017.12.24 |
View와 layout Inflate. + ViewHolder // kotlinx (0) | 2017.12.22 |
애플리케이션 기본 항목. 앱의 기본 동작 원리 (0) | 2017.12.08 |
외장 메모리 쓰기 금지 (0) | 2017.05.20 |