[Android] Dalvik과 ART

Dalvik

  • 구글의 댄 본스타인이 만든 VM
  • Java는 JVM위에서 실행되고, Android Dalvik위에서 실행된다.
  • Android 5.0 이하에서만 사용되고 그 이상 버전은 ART로 교체되었다.
  • Dalvik에서는 JIT(Just In Time)컴파일러를 사용하였다.

JIT

  • 처음 실행될 때 한번 컴파일하고 그 뒤에 자주 쓰이는 코드는 캐시에 저장하고 가져다 쓴다. 인터프리터의 느린 실행 속도를 개선할 수 있었다.
  • 하지만 처음 컴파일 단계에서 모든 코드를 메모리에 올려두고 작업해야 하기 때문에 메모리 소비가 많다

ART

  • Dalvik의 한계점을 개선한 새로운 런타임
  • 앱을 설치할 때 완전히 네이티브 코드로 변환하여 설치한다.
  • JIT대신 AOT 컴파일을 사용한다.

AOT

  • AOT는 중간 언어로 배포된 후 플랫폼에 맞계 기계어로 미리 번역하는 방식
  • JIT는 실행 시점에서 컴파일을 수행하는데 추가적인 메모리와 CPU 사이클이 필요한데, 이를 보완하는 방법으로 사용될수 있다.
  • 설치 속도가 Dalvik보다 느리고 공간도 많이 차이한다.
  • 처음 설치할 때 컴파일 작업을 다 해놓기 때문에 생기는 근본적인 한계
  • Android 5.0이하에서 개발된 어플들이 제대로 동작하지 못할 때도 있다.