APK 컴파일
앱을 빌드하고 APK를 생성할 때 해당 APK의 일부는 .dex 파일이다
.dex 파일에는 사용하는 모든 라이브러리를 포함하여 앱의 소스코드가 포함되어있음
.dex 파일은 소프트웨어 인터프리터용으로 설계된 저수준 코드인 바이트코드로 작성되어있다.
사용자가 앱을 실행하면 .dex 파일에 작성된 바이트코드가 ART에 의해 기계어 코드로 변환
Dalvik (<= KitKat)
해당 시기에는 RAM이 거의 없었으며 일부 200MB 밖에 없는 상황이었다.
JIT(Just In Time) 컴파일 이라는 전략을 사용했다
해당 전략은 컴파일러가 약간의 인터프리터 역할을 했으며 앱 실행 중에 작은 코드 덩어리를 컴파일하므로 런타임에도 마찬가지였다.
장점
필요한 코드만 컴파일 했기 때문에 많은 RAM을 절약할 수 있었다.
단점
이러한 모든 작업이 런타임중에 발생하여서 런타임 성능에 부정적인 영향을 미침 (이후 캐시기능 추가)
ART(>=Lollipop)
ART에서는 AOT(Ahead Of Time) 컴파일이라는 전략을 사용했음
AOT 전략은 앱을 실행하기 전에 컴파일되어 앱이 실행될 때 기계어 코드가 이미 준비되어있는 상황이다.
장점
1. 기계어 코드 실행 속도가 JIT보다 약 20배 빠르기때문에 런타임 성능이 크게 향상
단점
1. Dalvik보다 씬 많은 RAM을 사용
2. APK를 다운로드한 후 전체 앱을 기계어로 변환해야하기 때문에 설치 및 업데이트 상황에 시간이 오래거림
ART(>=Nougat)
JIT 컴파일이 ART에 다시 도입되며 프로필 기반 컴파일도 도입됨
기본적으로 앱을 JIT 컴파일을 사용하여 컴파일 되지만 ART에서 일부\ 메서드가 자주사용되는 것을 감지하면 메서드를 미리 컴파일 하고 캐시하여 최상의 성능을 얻을수 있다.
앱의 다른 부분은 실제로 사용될 때까지 컴파일되지 않은 상태로 유지
장점
1. 이 방식은 RAM의 사용량을 줄이면서 앱의 핵심 부분에 대해 가능한 최고의성능을 제공
단점
1. 프로필 데이터를 가져와야함
2. 자주 사용하는 메서드와 클래스를 미리 컴파일 하려면 사용자가 실제로 앱을 사용해야 한다(앱 초기에는 느림)
ART(>=Pie)
클라우드 프로필 기능을 추가
설치 직후에 성능을 개선하기 위해 앱을 미리 설치한 사용자로부터 프로필 데이터를 수집할 수 있으며 공통 프로필 파일을 만드는데 사용한다.
기존 기능도 사용하여 프로필 파일 업데이트한다.
'안드로이드 > CS' 카테고리의 다른 글
QUERY_ALL_PACKAGES (0) | 2022.11.02 |
---|---|
안드로이드 뷰 그려지는 과정 (0) | 2022.11.01 |
안드로이드 앱 서명 (1) | 2022.10.31 |
안드로이드 앱 번들 (0) | 2022.10.31 |
코틀린 Companion object, 자바 static 차이 (0) | 2022.10.27 |