맨위로가기

안드로이드 런타임

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

안드로이드 런타임(ART)은 안드로이드 운영 체제에서 애플리케이션을 실행하기 위한 런타임 환경이다. ART는 안드로이드 4.4 킷캣에서 기술 미리보기로 처음 도입되었으며, 안드로이드 5.0 롤리팝에서 달빅 가상 머신을 완전히 대체했다. ART는 AOT 컴파일을 통해 애플리케이션의 실행 효율성을 높이고, 전력 소비를 줄이는 장점을 제공한다. 이후 JIT 컴파일러, 클라우드 프로필, 기본 프로필 등의 기술이 추가되었으며, 안드로이드 13에서는 가비지 수집기가 개선되었다. ART는 달빅과 호환성을 유지하며, 애플리케이션 설치 시 컴파일 시간이 더 소요되고 저장 공간을 더 차지하는 단점이 있다.

더 읽어볼만한 페이지

  • 자바 가상 머신 - 핫스팟 (가상 머신)
    핫스팟은 오라클의 자바 런타임 환경에 포함된 가상 머신으로, 반복되는 코드 영역을 최적화하는 JIT 컴파일러이며, 1999년 출시 후 GNU GPL 라이선스로 사용 가능하다.
  • 자바 가상 머신 - OpenJDK
    OpenJDK는 2006년 썬 마이크로시스템즈가 발표하고 2007년에 릴리스한 오픈 소스 자바 플랫폼 구현체이며, 핫스팟 가상 머신, 자바 클래스 라이브러리 등을 포함하고 다양한 운영 체제와 아키텍처를 지원한다.
  • 안드로이드 (운영체제) - 구글 어시스턴트
    구글 어시스턴트는 2016년 구글에서 개발한 인공지능 음성 비서 서비스로, 양방향 대화 지원, 다양한 기기 및 플랫폼 확장성, 인터넷 검색, 일정 관리, 홈 오토메이션 제어 등의 기능을 제공하지만 개인정보 보호 문제에 대한 비판도 존재한다.
  • 안드로이드 (운영체제) - 웨어 OS
    웨어 OS는 구글이 개발한 스마트워치용 운영 체제로, 구글 서비스 통합, 음성 제어, 피트니스 추적 등의 기능을 제공하며 안드로이드 및 iOS 기기와 연동되고, 핏비트 인수 후 디자인 개선 및 피트니스 기능 통합, 삼성 갤럭시 워치 시리즈 탑재 등을 통해 지속적으로 발전하고 있다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 브루클린 미술관
    브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다.
  • 공식 웹사이트에 알 수 없는 변수를 사용한 문서 - 광주지방기상청
    광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다.
안드로이드 런타임 - [IT 관련 정보]에 관한 문서
일반 정보
상세 정보
장르런타임 환경

2. 역사

안드로이드 4.4 "킷캣"에서 ART가 처음 도입된 이후, 여러 버전을 거치면서 주요 변경 사항들이 있었다. 주요 변경 사항은 다음과 같다.

2. 1. 초기 개발 및 도입 (안드로이드 4.4 킷캣)

안드로이드 4.4 "킷캣"에서 ART는 달빅 가상 머신을 대체하는 런타임 환경으로 처음 소개되었으며, 기술 미리보기 형태로 제공되었다. 달빅은 기본 가상 머신으로 유지되었다.[7][8]

2. 2. 달빅 대체 (안드로이드 5.0 롤리팝)

안드로이드 4.4 "킷캣"은 ART를 기술 미리보기 형태로 Dalvik의 대안 런타임 환경으로 도입했지만, Dalvik이 기본 가상 머신으로 유지되었다.[7][8] 이후 주요 안드로이드 릴리스인 안드로이드 5.0 "롤리팝"에서는 Dalvik이 ART로 완전히 대체되었다.

2. 3. JIT 컴파일러 도입 (안드로이드 7.0 누가)

안드로이드 7.0 "누가"는 Java 런타임 환경을 중단된 아파치 하모니에서 OpenJDK로 전환하면서 JIT(Just-in-Time) 컴파일러를 ART에 코드 프로파일링과 함께 도입했다. 이를 통해 안드로이드 앱은 실행 중에 성능을 지속적으로 개선할 수 있게 되었다.[9] JIT 컴파일러는 ART의 AOT 컴파일러를 보완한다. 즉, 장치가 유휴 상태이고 충전 중일 때 AOT 컴파일러가 머신 코드로 컴파일하는 "핫 코드"(자주 사용되고 UI 스레드에서 실행되거나 시작 시간에 영향을 미치는 코드)를 식별하여 런타임 성능을 개선하고 저장 공간을 절약하도록 돕는다. 자주 사용되지 않는 코드는 JIT 컴파일에 의존한다.[10][11]

2. 4. 클라우드 프로필 도입 (안드로이드 9 파이)

안드로이드 9 "파이"는 압축된 바이트코드 파일을 사용하여 APK가 사용하는 저장 공간을 줄였다.[12] 또한, 프로파일러 데이터를 구글 플레이 서버에 업로드하여 유사한 기기를 가진 사용자가 다운로드할 때 앱과 함께 제공하여 구글 플레이에서 다운로드 시간을 최대 40%까지 단축했다. 구글 플레이 클라우드 프로필을 통해 앱을 설치할 때 최적화할 수 있어 안드로이드 7.0에서 8.1까지 나타나는 초기 성능 문제를 피할 수 있다.[12]

2. 5. 기본 프로필 도입 (2021년)

2021년 7월, 기본 프로필 개념이 도입되었다.[13] 기본 프로필은 앱을 처음 실행할 때부터 AOT 컴파일을 거쳐야 하는 메서드와 클래스를 정의하는 ART 프로필이며, 안드로이드 7.0 이상과 호환된다. 이는 안드로이드 9의 구글 플레이 클라우드 프로필을 사용할 수 없을 때 비슷한 기능을 제공하며, 클라우드 프로필을 사용할 수 있을 때는 자동으로 병합된다. 기본 프로필은 안드로이드X 라이브러리 및 젯팩 컴포즈 릴리스에 포함되어 있다.[14]

2. 6. 가비지 컬렉터 개선 (안드로이드 13)

안드로이드 13의 ART는 리눅스 `userfaultfd` 시스템 호출을 활용하는 새로운 가비지 수집기(GC)로 업데이트되었다.[15][16][17] 이는 메모리 압박, 컴파일된 코드 크기 및 jank를 줄이고, 가비지 수집 중 메모리 부족으로 인해 앱이 종료될 위험을 방지한다.[17]

3. 기술적 특징

Dalvik과 ART 아키텍처 비교


안드로이드 2.2 "프로요"는 달빅에 트레이스 기반 JIT(Just-in-time) 컴파일을 도입하여, 애플리케이션 실행 시 지속적으로 프로파일링하고, 자주 실행되는 짧은 바이트코드 세그먼트를 동적으로 컴파일하여 네이티브 기계어로 변환함으로써 애플리케이션의 실행을 최적화했다. 달빅이 애플리케이션의 나머지 바이트코드를 인터프리팅하는 동안 "트레이스"라고 불리는 짧은 바이트코드 세그먼트의 네이티브 실행은 상당한 성능 향상을 제공했다.[3][4]

달빅과 달리 ART는 애플리케이션 설치 시 전체 애플리케이션을 네이티브 기계어로 컴파일하는 AOT(Ahead-of-time) 컴파일을 도입했다. ART는 전반적인 실행 효율성을 개선하고 전력 소비를 줄여 모바일 기기의 배터리 사용 시간을 향상시켰다.[2][5][6]

3. 1. AOT 컴파일

ART는 애플리케이션 설치 시점에 AOT(Ahead-of-time) 컴파일을 통해 애플리케이션 전체를 네이티브 기계어로 변환한다. 이는 달빅의 인터프리터 방식과 트레이스 기반 JIT 컴파일을 제거함으로써 전반적인 실행 효율성을 개선하고 전력 소비를 줄여 모바일 기기의 배터리 사용 시간을 향상시킨다.[2][5][6] ART는 이 외에도 애플리케이션 실행 속도 향상, 개선된 메모리 할당 및 가비지 수집(GC) 메커니즘, 새로운 애플리케이션 디버깅 기능, 그리고 더 정확한 고급 프로파일링을 제공한다.

하위 호환성을 위해 ART는 APK 파일에 포함된 표준 .dex 파일을 통해 제공되는 달빅과 동일한 입력 바이트코드를 사용한다. 반면 .odex 파일은 실행 및 링크 가능한 형식(ELF) 실행 파일로 대체된다. ART는 온디바이스 `dex2oat` 유틸리티를 사용하여 애플리케이션을 컴파일하며, 컴파일된 ELF 실행 파일에서만 실행된다. 그 결과 ART는 달빅의 인터프리테이션과 트레이스 기반 JIT 컴파일과 관련된 여러 애플리케이션 실행 오버헤드를 제거한다. 다만, ART는 애플리케이션 설치 시 컴파일에 추가 시간이 필요하고, 컴파일된 코드를 저장하기 위해 보조 저장 장치(주로 플래시 메모리)를 좀 더 차지한다는 단점이 있다.[2][5][6]

3. 2. 하위 호환성

ART는 하위 호환성을 유지하기 위해 APK 파일의 일부로 제공되는 표준 .dex 파일을 통해 달빅과 동일한 입력 바이트코드를 사용하며, .odex 파일은 실행 및 링크 가능한 형식(ELF) 실행 파일로 대체된다.[2][5][6] 애플리케이션이 컴파일되면, ART의 온디바이스 유틸리티에 의해 컴파일된 ELF 실행 파일에서만 실행된다. 그 결과 ART는 달빅의 인터프리테이션과 트레이스 기반 JIT 컴파일과 관련된 다양한 애플리케이션 실행 오버헤드를 제거한다. ART의 단점은 애플리케이션 설치 시 컴파일에 추가 시간이 필요하고, 컴파일된 코드를 저장하기 위해 애플리케이션이 약간 더 많은 보조 저장 장치(일반적으로 플래시 메모리)를 차지한다는 것이다.[2][5][6]

3. 3. 개선된 가비지 컬렉션

ART는 메모리 할당 및 가비지 수집(GC) 메커니즘을 개선하여 앱 실행 중 메모리 관리를 효율적으로 수행한다. 이는 달빅에 비해 개선된 점이다.[2][5][6]

3. 4. 디버깅 및 프로파일링

ART는 개발자가 앱을 더욱 쉽게 분석하고 최적화할 수 있도록 새로운 애플리케이션 디버깅 기능과 더욱 정확한 고급 프로파일링 기능을 제공한다.[2][5][6]

4. 장단점

ART는 달빅과 달리 AOT(Ahead-of-time) 컴파일 방식을 사용하여, 애플리케이션 설치 시 전체 애플리케이션을 네이티브 기계어로 컴파일한다. 이를 통해 ART는 전반적인 실행 효율성을 개선하고 전력 소비를 줄여 모바일 기기에서 배터리 사용 시간을 향상시킨다. 또한 애플리케이션 실행 속도 향상, 개선된 메모리 할당 및 가비지 수집(GC) 메커니즘, 새로운 애플리케이션 디버깅 기능, 그리고 더 정확한 고급 프로파일링을 제공한다.[2][5][6]

그러나 ART는 애플리케이션 설치 시 컴파일에 추가 시간이 필요하고, 컴파일된 코드를 저장하기 위해 보조 저장 장치를 좀 더 많이 차지한다는 단점이 있다.[2][5][6]

4. 1. 장점

안드로이드 2.2 "프로요"는 트레이스 기반 JIT(Just-in-time) 컴파일을 달빅에 도입하여 애플리케이션 실행 성능을 향상시켰다. 달빅은 애플리케이션 실행 시 지속적으로 프로파일링을 하고, 자주 실행되는 바이트코드 세그먼트를 동적으로 컴파일하여 네이티브 기계어로 변환했다.[3][4]

ART는 달빅과 달리 AOT(Ahead-of-time) 컴파일을 도입하여 애플리케이션 설치 시 전체 애플리케이션을 네이티브 기계어로 컴파일한다. 이를 통해 ART는 전반적인 실행 효율성을 개선하고 전력 소비를 줄여 모바일 기기에서 배터리 사용 시간을 향상시킨다. 또한 ART는 애플리케이션 실행 속도 향상, 개선된 메모리 할당 및 가비지 수집(GC) 메커니즘, 새로운 애플리케이션 디버깅 기능, 그리고 더 정확한 고급 프로파일링을 제공한다.[2][5][6]

4. 2. 단점

ART는 달빅과 달리 애플리케이션을 설치할 때 전체 애플리케이션을 네이티브 기계어로 컴파일하는 AOT(Ahead-of-time) 컴파일 방식을 사용한다. ART의 단점은 애플리케이션 설치 시 컴파일에 추가 시간이 필요하고, 컴파일된 코드를 저장하기 위해 애플리케이션이 보조 저장 장치를 좀 더 많이 차지한다는 것이다.[2][5][6]

참조

[1] 웹사이트 NOTICE - platform/art - Git at Google https://android.goog[...] 2021-06-25
[2] 웹사이트 A Closer Look at Android RunTime (ART) in Android L http://anandtech.com[...] AnandTech 2014-07-01
[3] 웹사이트 A JIT Compiler for Android's Dalvik VM https://web.archive.[...] Google 2010-05
[4] 웹사이트 Google Android developer explains more about Dalvik and the JIT in Froyo http://www.androidce[...] 2010-05-26
[5] 웹사이트 Android Developers: ART and Dalvik https://source.andro[...] 2015-03-09
[6] 웹사이트 Android Developers: Configuring ART – How ART works https://source.andro[...] 2015-03-09
[7] 웹사이트 'ART' experiment in Android KitKat improves battery life and speeds up apps https://www.engadget[...] Engadget 2013-11-06
[8] 웹사이트 Experimental Google ART runtime in Android KitKat can bring twice faster app executions http://www.phonearen[...] 2013-11-07
[9] 웹사이트 Android 7.0 for Developers https://developer.an[...] 2021-03-22
[10] 웹사이트 Android 7.0 Nougat review—Do more on your gigantic smartphone https://arstechnica.[...] 2016-08-22
[11] 웹사이트 Implementing ART Just-In-Time (JIT) Compiler https://source.andro[...] 2017-01-22
[12] 웹사이트 Android 9 Pie, thoroughly reviewed https://arstechnica.[...] 2018-09-13
[13] 웹사이트 ProfileInstaller {{!}} Jetpack https://developer.an[...] 2023-07-05
[14] 웹사이트 Improving App Performance with Baseline Profiles https://android-deve[...] 2022-01-28
[15] Citation What's new in app performance https://www.youtube.[...] 2022-05-12
[16] 간행물 Utilizing the Linux Userfaultfd System Call in a Compaction Phase of a Garbage Collection Process https://www.tdcommon[...] 2020-10-12
[17] 웹사이트 Android 13 is in AOSP! https://android-deve[...] 2022-08-16
[18] 웹사이트 A Closer Look at Android RunTime (ART) in Android L http://anandtech.com[...] AnandTech 2014-07-01
[19] 웹사이트 Google Android developer explains more about Dalvik and the JIT in Froyo http://www.androidce[...] 2010-05-26
[20] 문서 Android ランタイム(ART)と Dalvik | Android オープンソース プロジェクト | Android Open Source Project https://source.andro[...]
[21] 웹인용 A Closer Look at Android RunTime (ART) in Android L http://anandtech.com[...] AnandTech 2014-07-01



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com