안드로이드 런타임(ART)은 구글이 안드로이드 운영체제에서 애플리케이션을 실행하기 위해 제공하는 기본 실행 환경이다. 2014년 안드로이드 4.4 (KitKat)부터 기본 런타임으로 도입되었으며, 이전에 사용되던 Dalvik 가상 머신을 대체한다. ART는 바이트코드(.dex 파일)를 미리 Ahead‑Of‑Time(AOT) 컴파일하여 네이티브 코드(.oat 파일)로 변환함으로써 실행 시 오버헤드를 크게 감소시키고, 메모리 효율성과 배터리 수명을 향상시킨다.
1. 역사와 배경
| 연도 | 주요 사건 |
|---|---|
| 2008 | 안드로이드 최초 출시, Dalvik VM 사용 |
| 2011 | ART 초기 프로토타입 공개 (Android 4.0‑4.2) |
| 2014 | Android 4.4 KitKat에 ART가 옵션 런타임으로 포함 |
| 2015 | Android 5.0 Lollipop부터 ART가 기본 런타임으로 전환 |
| 2020 이후 | ART 지속적 최적화·보안 강화 (Dex2Oat, JIT·AOT 하이브리드 등) |
Dalvik은 Just‑In‑Time(JIT) 컴파일 방식을 사용해 실행 중에 바이트코드를 네이티브 코드로 변환했지만, 초기 로딩 지연과 메모리 사용량이 큰 단점이 있었다. ART는 이러한 한계를 극복하기 위해 AOT 컴파일을 기본으로 채택하면서도, 필요에 따라 JIT을 보조적으로 활용한다.
2. 핵심 아키텍처
-
Dex 파일
- Java/Kotlin 소스가
javac→dx(또는d8) 과정을 거쳐 Dalvik Executable (.dex) 형식으로 변환된 파일.
- Java/Kotlin 소스가
-
Dex2Oat
- 설치 시 혹은 시스템 부팅 시
dex2oat도구가.dex를 OAT (Optimized Android) 파일로 변환한다. - 변환 과정에서 AOT 컴파일, 프로파일링, 인라인 및 리소스 최적화가 수행된다.
- 설치 시 혹은 시스템 부팅 시
-
OAT 파일
- 네이티브 코드와 메타데이터가 포함된 실행 파일 형식.
- 각 앱마다 독립적으로 생성되며,
/data/app/<package>/oat/경로에 저장된다.
-
Art Runtime
- JVM과 유사한 표준 라이브러리(java., android.)와 Garbage Collector(GC), Thread Scheduler, JIT/AOT 엔진 등을 제공한다.
- Zygote 프로세스를 통해 앱 프로세스가 빠르게 포크되도록 지원한다.
-
GC
- Mark‑Sweep-Compact 알고리즘을 사용, 메모리 파편화를 최소화하고 실시간 성능을 보장한다.
-
프로파일링
- 실행 시 수집된 히스토리 데이터를 기반으로 앱 업데이트 시 재컴파일이 최적화된다.
3. 주요 특징
| 특징 | 설명 |
|---|---|
| AOT 컴파일 | 설치 시 전체 바이트코드를 네이티브 코드로 변환해 실행 속도 향상 |
| JIT 하이브리드 | 런타임 중 빈번히 호출되는 메서드에 대해 추가 JIT 컴파일 수행 |
| 향상된 GC | Mark‑Sweep-Compact 방식으로 GC 정지 시간을 감소 |
| 멀티아키텍처 지원 | ARMv7, ARM64, x86, x86_64 등 다양한 CPU 아키텍처에 최적화된 바이너리 생성 |
| 보안 강화 | Bionic libc와 연계된 메모리 보호(ASLR, DEP) 및 SELinux 정책 적용 |
| 프로파일 기반 최적화 | 사용자 행동 데이터를 활용해 재컴파일 시 최적화 레벨 조정 |
| 디버깅 및 프로파일링 도구 | adb, android studio, perf, systrace 등과 연동 가능 |
4. Dalvik과의 비교
| 항목 | Dalvik | ART |
|---|---|---|
| 컴파일 시점 | 실행 시 JIT | 설치 시 AOT (기본) + 필요시 JIT |
| 성능 | 초기 실행 시 지연 발생 | 대부분의 메서드가 네이티브 코드라 즉시 실행 |
| 메모리 사용 | 실행 중 메모리 압축이 낮음 | AOT 컴파일으로 메모리 사용량이 다소 증가하지만 GC 효율성으로 전체 소비는 감소 |
| 배터리 | CPU 사용량이 높아 배터리 소모가 큼 | 효율적인 네이티브 실행으로 배터리 친화적 |
| 디버깅 | JIT 때문에 스택 트레이스가 복잡 | AOT 덕분에 스택 트레이스가 보다 직관적 |
| 지원 종료 | Android 5.0 Lollipop부터 기본 런타임에서 제외 | 현재 최신 안드로이드 버전에서도 기본 런타임으로 유지 |
5. 보안 및 안정성
- 주소 무작위화(ASLR)와 데이터 실행 방지(DEP)가 기본 적용돼 메모리 공격을 억제한다.
- SELinux와 연계된 권한 제한으로 각 앱 프로세스가 격리된다.
- 바이트코드 검증 단계에서
dexopt가 악성 변조를 탐지하고, 부정확한 코드 실행을 방지한다. - 스택 보호(Stack Canaries)와 코드 서명을 통해 루트킷 및 런타임 패치 공격을 최소화한다.
6. 최신 동향 및 미래 전망
-
AOT·JIT 혼합 최적화
- Android 12 이후
profile-guidedAOT가 확대돼, 실제 사용 패턴을 반영한 재컴파일이 자동화된다.
- Android 12 이후
-
ART for Wear OS & TV
- 저전력 디바이스에 맞춰 경량화된 GC와 빠른 부팅을 위한 미니멀 ART 구현이 진행 중이다.
-
RISC‑V 지원
- 2025년부터 RISC‑V 기반 스마트폰에 대한 ART 바이너리 생성이 공식 지원될 전망이다.
-
데스크톱·클라우드 연동
- Android 앱을 데스크톱(Chrome OS) 및 클라우드(Arc·Wayland) 환경에서 실행할 때 동일한 ART 엔진을 활용, 일관된 성능 및 보안을 제공한다.
-
AI·ML 최적화
- TensorFlow Lite와 연동되는 Neural Networks API를 위해 ART 내부에서 GPU/TPU 전용 코드 경로를 자동 삽입하는 연구가 진행 중이다.
7. 참고 문헌·링크
- Android Developers – Android Runtime Overview (developer.android.com)
- Google I/O 2014 – “Introducing Android Runtime (ART)” 발표 자료
- Android Open Source Project (AOSP) –
art/디렉터리 소스 코드 - "The ART of Android Runtime", Proceedings of MobileDev 2016
요약
안드로이드 런타임(ART)은 안드로이드 앱을 효율적으로 실행하기 위한 현대적인 런타임 환경으로, AOT 컴파일 기반의 높은 성능과 향상된 메모리·배터리 관리, 견고한 보안 기능을 제공한다. Dalvik을 대체한 이후 지속적인 최적화와 플랫폼 확대를 통해 안드로이드 생태계의 핵심 인프라로 자리매김하고 있다.