본문 바로가기
프레임워크/Android

[개념] 달빅과 ART(JIT 컴파일러와 AOT컴파일러)

by hs_seo 2016. 5. 16.

[컴파일러]

고급언어로 쓰여진 프로그램이 컴퓨터에서 실행되기 위해서는 

컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주어야 한다. 

이런 역활을 하는 프로그램이 컴파일러 이다. 


고급언어는 인간이 이해할 수 있는 표현으로 사용할 수 있는 언어이고, 

저급언어는 컴퓨터가 이해할 수 있는 표현으로 사용하는 언어이다. 


컴파일러는 소스코드를 컴파일하여 목적코드(Object Code)를 생성하고,

목적코드는 링커가 라이브러리와 연결하여 실행가능한 코드를 생성하여 실행한다. 


* 자바 컴파일러와 JIT 컴파일러는 다른 것이다. 자바 컴파일러는 .java 파일을 해석해서 .class파일(자바 바이트 코드)로 변환한다. JIT 컴파일러는 .class파일을 해석해서 기계어로 번역하여 JVM이 실행할 수 있는 형태로 번역한다.



[ART vs 달빅 = AOT 컴파일러 vs JIT 컴파일러]

안드로이드에서 컴파일러에는 달빅, ART가 있다. 

ART는 안드로이드 5.0에서 정식으로 채택되었다. 


이 둘의 차이는 컴파일 방식에 있다. 

달빅은 JIT 컴파일러이고, ART는 AOT 컴파일러 이다. 

JIT는 실행시점에 소소코드를 번역한다. 설치는 빠르지만 실행시점에 느리게 된다.

번역한 정보를 메모리에 올려야 하기 때문에 메모리를 많이 먹는다. 


AOT는 설치시점에 소스코드를 번역한다. 설치가 느리고, 번역을 해서 따로 파일을 저장하기 때문에 용량을 많이 먹게 된다. 

하지만 실행시점에 미리 번역한 파일을 실행하므로 빠르게 실행이 가능하다. 


즉, JIT는 실행 디바이스에서 매번 번역해야 하므로 느리고, AOT는 미리 번역해서 저장해 두기 때문에 빠르다.



* 구글 I/O 2016의 발표에 따른 추가 사항

안드로이드 N에서는 ART 에 JIT 컴파일러도 추가 된다고 합니다.


프로필 가이드 방식의 JIT/AOT 컴파일


Android N에서 코드 프로파일링을 포함한 JIT(Just in Time) 컴파일러를 ART에 추가했으며, 실행 시에 Android 앱의 성능이 계속해서 향상됩니다. JIT 컴파일러는 ART의 현재 AOT(Ahead of Time) 컴파일러를 보완하고 런타임 성능을 개선하며, 저장 공간을 절약하고, 앱 업데이트 및 시스템 업데이트 속도를 빠르게 해줍니다.

프로필 가이드 방식의 컴파일을 통해 ART는 실제 사용량과 기기의 조건에 따라 각 앱의 AOT/JIT 컴파일을 관리할 수 있습니다. 예를 들어, ART는 최적의 성능을 위해 각 앱의 핫 메서드에 대한 프로필을 유지관리하고 이들 메서드를 프리컴파일하고 캐싱할 수 있습니다. 이 경우 앱의 다른 부분들은 실제로 사용될 때까지 컴파일하지 않고 남겨둡니다.

프로필 가이드 방식의 컴파일은 앱의 주요 부분들에서 성능을 개선할 뿐만 아니라 관련 바이너리를 비롯한 앱 전체의 RAM 공간을 줄이는 데 도움이 됩니다. 이 기능은 저용량 메모리 기기에 특히 중요합니다.

ART는 기기 배터리에 미치는 영향이 최소화되는 방식으로 프로필 가이드 방식의 컴파일을 관리합니다. ART는 기기가 유휴 상태이고 충전 중일 때만 프리컴파일을 수행하며, 해당 작업을 미리 수행하여 시간과 배터리를 절약합니다



http://android-developers.blogspot.kr/2016/05/whats-new-in-android-n-release-virtual-reality-android-studio.html

https://developer.android.com/preview/api-overview.html#jit_aot


반응형