개발하는 두더지

[Android] Dalvik , ART 란 ? 본문

Java,Android

[Android] Dalvik , ART 란 ?

덜지 2017. 12. 18. 15:37

Dalvik , ART 란 ?





Dalvik, ART 를 알아보기전 배경을 먼저 알아보자.


일반적인 컴파일 언어는 CPU의 아키텍쳐와 플랫폼의 환경에 맞추어 기계어로 번역된다. 한마디로 사람이 작성한 언어를 CPU가 알아 볼 수 있는 언어로 번역하는 것이다. 하지만 자바의 경우, 한가지 CPU의 아키텍쳐나 환경에 맞추는 것이 아닌 바이트코드라는 것으로 컴파일 되며, 이를 실행하기 위해 자바 가상 머신이 필요하다. 자바는 바이트코드만으로 여러가지 아키텍쳐나 플랫폼에서 작동할 수 있도록 하는 것이 목표이기 때문이다. 자바 가상 머신인 JVM을 사용할 수 있지만 라이선스 문제로 구글에서 Dalvik VM을 따로 개발해서 안드로이드에 넣었다.



Dalvik VM

  • 32비트만 지원
  • JIT 컴파일러 사용 ( Just In Time )
  • 실행할 때 마다 컴파일.
  • CPU, 메모리 사용 높음.
  • 설치 파일 작음.
  • 배터리 소모 큼 -> 왜냐하면 실행시마다 컴파일 하기 때문에 하드웨어 전체적으로 상당한 부하가 생기므로



ART VM

  • 32 , 64 비트 지원
  • AOT 컴파일러 사용 ( Ahead On Time )
  • 안드로이드 킷캣 KitKat 버전부터 생김
  • 안드로이드 롤리팝 Lolipop 버전 이후는 AOT 컴파일러가 기본으로 적용됨
  • 안드로이드 누가 Nougat 버전 부터  JIT와 AOT를 모두 탑재함으로써 최초 설치시에는 무조껀 JIT를 사용하도록하여 설치시간과 용량을 적게 소모한 뒤, 차후 기기를 사용하지 않을 때나 충전 중일 경우 컴파일을 조금씩 하여, 자주 사용되는 앱을 AOT 방식으로 전환하는 것으로 바뀜.
  • 설치시에 컴파일시 코드를 전체적으로 변환하고 저장 -> 실행때 마다 변환된 코드를 읽어들임. 
  • CPU, 메모리 사용 낮음.
  • 설치 파일 큼.
  • 배터리 성능 향상.
  • GC 향상.




JIT 이전, JIT, ART를 쉽게 설명해놓은 비유가 하나 있다.

영어판 비행 매뉴얼을 예로 본다면

JIT 이전 :  비행 중에 필요한 부분을 한글로 번역하면서 읽고 비행하는 것

JIT        :  비행 전에 미리 이런 부분을 쓰겠구나하고 일부분 한글로 번역하고 비행하는 것

ART      :  비행 매뉴얼을 받아오는 시점에서 완벽히 한글 매뉴얼로 번역하고 비행하는 것







Comments