안드로이드 런타임(Android Runtime, 약칭 ART)은 구글이 개발한 안드로이드 운영 체제용 애플리케이션 런타임 시스템이다. 안드로이드에서 앱 및 일부 시스템 서비스가 사용하는 관리형 런타임(managed runtime)으로, 애플리케이션의 바이트코드를 기기에서 실행 가능한 형태로 변환하고 실행하는 역할을 담당한다. 기존에 안드로이드가 사용하던 가상 머신인 달빅(Dalvik)을 대체하여 도입되었으며, C++로 작성되었고 아파치 라이선스 2.0 하에 공개되어 있다.
배경과 역사
초기 안드로이드는 자바 기반 애플리케이션을 실행하기 위해 달빅 가상 머신(Dalvik VM)을 사용하였다. 달빅은 DEX(Dalvik Executable) 형식의 바이트코드를 인터프리터 방식과 트레이싱 JIT(Just-In-Time) 컴파일 방식을 통해 실행하였다. 그러나 달빅은 실행 성능과 배터리 효율 측면에서 한계를 드러냈고, 이를 개선하기 위해 구글은 새로운 런타임인 ART를 개발하였다.
ART는 안드로이드 4.4 "킷캣"(KitKat)에서 기술 프리뷰(technology preview)로 처음 도입되었으며, 이 시점에는 달빅이 여전히 기본 가상 머신으로 유지되었다. 이후 안드로이드 5.0 "롤리팝"(Lollipop)부터 ART가 달빅을 완전히 대체하여 기본 런타임으로 자리 잡았다.
기술적 특징
달빅이 주로 인터프리터와 JIT 컴파일 방식에 의존한 반면, ART는 초기 버전에서 AOT(Ahead-Of-Time) 컴파일 방식을 채택하였다. AOT 방식은 애플리케이션 설치 시점에 성능이 중요한 코드 부분을 네이티브 기계어로 사전 컴파일하여, 실행 시점에 컴파일 과정을 거치지 않고 바로 실행할 수 있게 한다. 이를 통해 전반적인 실행 효율성을 높이고 전력 소비를 줄여 모바일 기기 배터리 사용 시간을 개선하는 효과를 얻었다.
ART는 하위 호환성을 유지하기 위해 기존 달빅과 동일한 표준 DEX 바이트코드 입력을 사용하며, APK 파일 내의 코드를 컴파일한다. 또한 ART는 메모리 할당과 쓰레기 수집(GC) 메커니즘을 개선하고, 보다 정확한 애플리케이션 프로파일링과 디버깅 기능을 제공한다.
다만 초기 ART의 AOT 방식은 애플리케이션 설치 시 추가적인 컴파일 시간이 필요하고, 컴파일된 코드를 저장하기 위해 더 많은 저장 공간을 차지한다는 단점이 있었다. 특히 월간 보안 업데이트 이후마다 사용자가 오랫동안 기기를 사용하지 못하게 되는 문제가 지적되었다.
후속 발전
안드로이드 7.0 "누가"(Nougat)부터는 ART가 순수 AOT 방식에서 하이브리드 JIT/AOT 방식으로 전환되었다. 초기에는 JIT 컴파일에 의존하다가, 기기가 유휴 상태이고 충전 중일 때 자주 사용되거나 UI 스레드에서 실행되는 "핫 코드"(hot code)를 네이티브 코드로 추가 컴파일하는 방식이다. 이를 통해 설치 시간과 저장 공간 문제를 완화하면서도 실행 성능을 유지하였다. 또한 같은 시기에 기존 아파치 하모니(Apache Harmony) 자바 런타임이 OpenJDK 기반으로 교체되었다.
안드로이드 9 "파이"(Pie)에서는 압축된 바이트코드 파일을 도입하여 APK 저장 공간을 줄였고, 프로파일링 데이터를 구글 플레이 서버에 업로드하여 유사한 기기를 사용하는 사용자에게 다운로드 시 함께 제공하는 방식으로 다운로드 시간을 단축하였다. 2021년에는 베이스라인 프로필(baseline profiles) 개념이 도입되어 앱의 첫 실행부터 AOT 컴파일 대상이 되어야 할 메서드와 클래스를 사전에 정의할 수 있게 되었다.
안드로이드 13에서는 리눅스 커널의 userfaultfd 시스템 호출을 활용한 새로운 쓰레기 수집 방식을 도입하여 메모리 압박과 컴파일된 코드 크기, 버벅임을 줄이는 개선이 이루어졌다.
현재 지위
ART는 현재 안드로이드 운영 체제의 핵심 구성 요소로서, ARM64, RISC-V, x86 등 다양한 플랫폼에서 동작한다. 안드로이드 12부터는 메인라인(Mainline) 프로젝트의 일환으로 ART 모듈이 시스템 업데이트를 통해 독립적으로 갱신될 수 있게 되어, 사용자가 기기 제조사의 전체 시스템 업데이트를 기다리지 않고도 최신 런타임 개선 사항을 받을 수 있게 되었다.