안드로이드 런타임

이윤설·2025년 2월 26일
0

안드로이드 연구소

목록 보기
18/33

안드로이드 런타임(Android Runtime, ART)이란?

안드로이드에서 앱이 실행되기 위해서는 CPU가 이해할 수 있는 기계어(Machine Code)로 변환되어야 한다. 이 변환 방식에 따라 크게 두 가지 방식이 존재한다.

  1. JIT(Just In Time) 컴파일: 앱 실행 중에 실시간으로 코드를 변환하여 실행하는 방식
  2. AOT(Ahead Of Time) 컴파일: 앱 설치 시 미리 기계어로 변환하여 저장하는 방식

과거에는 Dalvik 가상 머신(DVM)이 JIT 방식으로 실행되었지만, 이후 Android Runtime(ART)이 도입되면서 AOT 방식으로 변경되었고, 이후에는 JIT과 AOT를 혼합한 하이브리드 방식이 사용되고 있다.

1. Dalvik 가상 머신(DVM)

안드로이드 초기 버전(Kitkat 이전)에서는 Dalvik Virtual Machine(DVM)을 사용했으며, JIT 컴파일 방식을 채택했다.

JIT(Just In Time) 방식의 특징

  • 앱이 실행되는 순간, 필요한 바이트 코드를 실시간으로 변환하여 Machine Code로 변환한다.
  • 자주 실행되는 코드는 캐싱하여 RAM에 저장하고, 이후 실행 시 변환 과정을 생략하여 성능을 최적화한다.
  • 앱 실행 중에 변환이 이루어지므로 실행 속도가 비교적 느리다.
  • 컴파일 과정이 반복되기 때문에 RAM 사용량과 배터리 소모량이 증가하는 단점이 있다.
  • 앱 설치 속도는 빠르다. 설치 시 기계어 변환을 수행하지 않기 때문이다.
  • 앱 용량이 작다. Machine Code를 저장하지 않기 때문에 저장 공간을 절약할 수 있다.

Dalvik 실행 과정

  1. Java 소스 코드 → Java 바이트 코드 변환
  2. Java 바이트 코드 → Dalvik 바이트 코드(dex) 변환
  3. Dalvik 바이트 코드 → Dalvik VM에서 실행

이처럼 Dalvik은 앱 실행 시마다 JIT 컴파일을 수행하므로 실행 속도가 느려질 수 있다는 단점이 있었다.


2. ART(Android Runtime)의 등장

Android 4.4 Kitkat 버전(2013년)부터는 새로운 앱 실행 환경인 ART(Android Runtime)가 도입되었다. ART는 AOT(Ahead Of Time) 컴파일 방식을 채택하여 기존 Dalvik의 성능 문제를 해결했다.

AOT(Ahead Of Time) 방식의 특징

  • 앱을 설치할 때 모든 코드를 미리 Machine Code로 변환하여 ROM에 저장한다.
  • 앱 실행 시 추가적인 변환 과정이 없으므로 매우 빠르게 실행된다. 왜냐하면 앱 설치 시에 필요한 모든 코드를 미리 머신 코드로 바꾸기 때문에 실행 중에 변환하지 않아도 되기 때문이다.
  • 설치 시간이 길어진다. 설치 과정에서 모든 코드를 변환하는 작업이 필요하기 때문이다.
  • 앱의 크기가 증가진다. 변환된 Machine Code가 포함되기 때문에 JIT 방식보다 보통 1.5배~2배 커질 수 있다.
  • 배터리와 RAM 사용량이 줄어든다. 실행 중에 추가적인 변환이 필요하지 않기 때문이다.

ART 실행 과정

  1. DEX 파일: 안드로이드 앱을 개발할 때, 코드(Java나 Kotlin 등)는 DEX(Dalvik Executable) 파일로 컴파일된다. DEX 파일은 안드로이드 기기에서 실행할 수 있는 바이너리 형식으로 변환된 앱의 코드다.

  2. DEX2OAT(최적화 과정): DEX 파일은 기기에 설치될 때, "DEX to OAT" 변환 과정을 거친다. DEX2OAT는 DEX 파일을 OAT(Optimized Android Executable) 파일로 변환하는 툴이다. 이 과정에서 앱의 코드가 최적화되고, 실행 성능을 높이기 위해 특정 최적화 작업이 이루어진다. 이 과정은 주로 앱 설치 시에 이루어진다.

  3. Native Code로 변환 후 ROM에 저장: 변환된 OAT 파일은 ROM에 저장된다.
    ROM에 저장된 OAT 파일은 실제 하드웨어에서 빠르게 실행될 수 있도록, CPU 아키텍처에 맞게 최적화된 네이티브 코드 형태로 변환된다.

  4. Native Code 실행: 기기의 ART(Android Runtime)에서 이 최적화된 네이티브 코드를 실행한다. ART는 앱을 실행하기 위한 런타임 환경으로, 코드 실행 시 JIT(Just-In-Time) 방식이나 AOT(Ahead-Of-Time) 방식으로 최적화된 네이티브 코드를 실행한다.


3. 최신 안드로이드: JIT + AOT 하이브리드 방식

Android 7.0 Nougat(2016년) 버전부터는 JIT과 AOT 방식을 혼합한 하이브리드 방식이 도입되었다. 이 방식은 JIT과 AOT의 장점을 조합하여 최적의 성능을 제공한다.

하이브리드 방식의 특징

  • 앱을 처음 실행할 때는 JIT 방식으로 빠르게 실행
  • 반복적으로 실행되는 코드는 AOT 방식으로 변환하여 최적화
  • 앱 실행 속도와 설치 시간을 적절히 절충하여 최상의 사용자 경험 제공

4. Dalvik vs ART vs 하이브리드 방식 비교

Dalvik (JIT)ART (AOT)하이브리드 (JIT + AOT)
컴파일 시점실행할 때 변환설치할 때 변환실행 중 JIT, 이후 AOT 최적화
앱 설치 속도빠름느림적당함
앱 실행 속도느림빠름빠름
앱 용량작음적당함
배터리/RAM 사용량많음적음절충

5. 결론

최신 안드로이드 런타임의 장점

  • 앱 실행 속도가 빠름 (초기 실행은 JIT, 이후 AOT 최적화 적용)
  • 설치 시간이 과거보다 개선됨 (설치 과정에서 모든 코드를 변환하는 것이 아니라, 실행하면서 최적화)
  • 배터리 효율성이 좋아지고 RAM 사용량이 최적화됨

참고
https://softwaree.tistory.com/52

profile
화려한 외면이 아닌 단단한 내면

0개의 댓글

관련 채용 정보