ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Android 런타임 ART 및 Dalvik
    안드로이드 학습/Android 기술면접 대비 2023. 6. 5. 18:26

    Android 런타임(ART)은 Android의 애플리케이션 및 일부 시스템 서비스에서 사용하는 관리형 런타임입니다. ART와 그 전의 Dalvik은 원래 Android 프로젝트용으로 특별히 제작된 것입니다.

     

    안드로이드는 처음 자바 기반으로 개발할수 있는 환경을 만들었다. 그러면 왜 JVM을 안쓰고 따로 런타임을 사용하는 것인지 궁금할수 있다.  (JVM 내용 보러가기)

     

    다른 블로그에 찾아보니 2가지 정도의 문제점이 있었다고한다.

     

    (1) 라이센스 문제

    • 아무래도 자바라는 언어가 안드로이드에서 개발한 것이 아니기 때문에 라이센스 문제가 있다고 한다. 

     

    (2) 메모리 효율성

    • JVM은 스택 기반 모델로 많은 메모리를 요구하지만 DVM은 레지스터 기반 모델로 적은 메모리에 최적화 되어 있다. (JVM에 비해 명령이 단순하고 처리 속도가 빠르기 때문)
    • 여러 개 VM 인스턴스를 실행할 수 있고, 프로세스 독립성, 메모리 관리 & 스레딩을 지원한다.

     

    솔직히 메모리 효율성 얘기는 봐도 무슨 내용인지 잘 모르겠다....

     

    DVM(Dalvik Virtual Machine)이란?

    Dalvik 은 Api버전 2.1부터 5.1까지 사용되었던 런타임 환경입니다.

     

    • JIT(Just In Time)컴파일러를 사용합니다.
    • 실행되는 시점에 필요한 코드만 컴파일하여 실행하는 방식.
    • 따라서 런타임 중에 컴파일을 진행하여 런타임이 느리게 동작할 수 있습니다. *(화면 전환, 앱 실행될 떄 마다 코드를 컴파일합니다.)

     

    JIT의 주요 특징

    • 앱이 실행되는 순간 자주 사용되는 바이트 코드를 컴파일하여 Machine Code로 변환 후 캐싱하여 RAM에 올립니다.
    • 화면 전환 또는 앱이 실행 될 때마다 필요한 코드를 실시간 컴파일 하기 때문에 그 시간만큼 사용성에 있어서 latency가 발생할 수 밖에 없습니다.
    • 컴파일이 빈번하게 발생되기 때문에 RAM 점유율, 배터리 소모량 증가 등의 이슈도 있습니다.
    • 장점으로는, AOT 대비 APP 설치 시간이 매우 빠릅니다. 설치 할때 컴파일을 하지 않기 때문입니다.
    • AOT 대비 앱 용량이 작습니다.

     

    DVM 작동 흐름

    DVM 이미지 1
    DVM 이미지 2

    • JVM에서 실행되는 자바 바이트 코드로 변환되는 동일한 과정을 거치지만 마지막 두단계가 다름.
    • Dex Comiler는 class파일을 dex파일로 변경하여 DVM에서 실행가능하게 만든다. 여러개의 class파일이 하나의 dex파일로 변경되며 최종적으로 dex, 리소스를 포함한 기타 라이브러리 등이 압축되어 APK(Android application package)가 완성된다.
    • JVM은 단일 인스턴스로 여러 애플리케이션에서 공유되어 사용되지만 DVM은 다중 인스턴스로 실행되도록 설계되었기 때문에 좀 더 효율적으로 운영되고, 애플리케이션에 자체적인 VM인스턴스가 제공된다.

     

     

    ART란?

    ART는 Android 4.4부터 현재까지 적용되는 런타임 환경입니다.

     

    • ART는 Dalvik Virtual Machine (DVM)의 후속 버전으로 도입되었습니다
    • AOT(Ahead Of Time) 컴파일러를 사용
    • 이는 어플리케이션이 설치되는 시점에 코드를 컴파일 하고 미리 캐시하여 실행하는 방식입니다.
    • 이러한 방식으로 어플리케이션 실행 속도가 빠릅니다.

     

    AOT의 주요 특징

    • Android Kitkat 버전에 도입된 ART (Android Runtime) 에서 사용되는 컴파일 방식입니다.
    • 앱 설치 할때 모든 코드를 Machine Code로 변환 후 ROM에 저장합니다.
    • 앱 설치 속도가 JIT에 비하여 매우 느립니다.
    • 앱용량이 JIT 방식에 비해 커집니다.
    • 앱 실행시 컴파일을 하지 않아도 되기 때문에 컴파일로 인해 발생될수 있는 latency가 없어서 매우 빠릅니다.
    • 미리 컴파일 후에 ROM에 저장하기 때문에 용량이 큽니다. (JIT 대비 보통 1.5배 ~ 최대 2배)

     

    JIT VS AOT

     

    JIT :

    • 앱 실행 시 컴파일
    • 설치 속도 비교적 빠름 (실행때 컴파일을 해서)
    • 실행 속도 비교적 느림 (실행때 컴파일을 해서)
    • 용량 작음

     

     AOT

    • 앱 설치 시 컴파일
    • 설치 속도 느림 (설치시 컴파일을 완성하기 떄문)
    • 실행 속도 빠름 (실행시 컴파일을 안하기 때문)
    • 용량 큼

     

     

    4.4 킷캣 버전 이전 까지는 Dalvik VM을 사용했다.(킷캣에서 기기 설정 변경시 ART최초 사용은 가능) JVM은 오라클 소유로, 라이선스 분쟁을 피하기 위해서이다.

     

    5.0 롤리팝 버전 이후 부터는 ART(Android Run Time) VM을 사용했다. AOT 컴파일러가 기본으로 적용되어 프로그램 최초 실행시가 아닌, 그 이전에(주로 설치시에) 한번에 전체를 변환해 두고 저장한 뒤, 프로그램 실행시 마다 변환된 코드를 읽어들이게 된다.

     

    Android 7.0(Nougat)부터AOT와 JIT를 모두 활용한다. 정확히는 앱을 처음 실행할 때는 무조건 JIT로 실행하여 설치 시간을 줄이고, 앱을 사용하지 않을 때 AOT로 조금씩 컴파일하는 것이다. 이렇게 하면 설치 시간과 성능 모두 잡을 수 있다.

     

    '안드로이드 학습 > Android 기술면접 대비' 카테고리의 다른 글

    ANR이란  (0) 2023.06.12
    Android Service  (0) 2023.06.12
    안드로이드 참고할한 링크들  (0) 2023.05.29
    ViewHolder (RecyclerView & ListView)  (0) 2023.05.25
    Android Process와 Thread  (0) 2023.05.22
Designed by Tistory.