본문 바로가기
관심거리/Android&Nexus

안드로이드 ART

by 상실이남집사 2013. 12. 22.

ART를 알기위해서는 달빅에 대해서 잠깐 설명하고자 합니다.


달빅(Dalvik)은 

안드로이드 기기에서 가상 머신은 자바 프로그래밍 애플리케이션을 실행할 때 필수 단계입니다.

앱을 바이트코드로 컴파일하고 dex(달빅의 실행 포맷)으로 전환해 달빅 가상 머신에 넘겨 실행합니다.

 

안드로이드 2.2는 JIT 컴파일러를 도입해 대부분 애플리케이션의 실행 효율을 높였습니다. 

이후론 더 이상 명확한 성능 향상이 없었지만 구글과 제조사들은 여전히 달빅에 최적화를 했습니다.


하지만 이제 달빅의 한계가 점점 가까워지자 4.4 kitkat에서는 새로운 ART를 추가하게됩니다.

(만약 성공한다면 이후의 버전에서는 당연하지만 점차 ART로 전환을 시도하리라 생각됩니다.)

 

ART의 가장큰 변화된 점은 JIT을 포기하고 AOT로 전환했습니다. 

우리는 히스토리에서 dex2oat가 실행하는 걸 보고 ART가 작동한다는 걸 파악할 수 있습니다.

 


ART는 


구글의 최신 모바일OS인 안드로이드 4.4.2 킷캣(Kitkat)에서 지원되는 ART는 현재 안드로이드에서 사용되는 가상머신인 달빅(Dalvik)의 대처 방안으로 더 빠르고 효율적인 동작,배터리 수명 향상, 그리고 더 유연하게 사용되기위해 2년여간 개발된 런타임입니다.


ARMv7, x86, MIPS를 모두 지원하며 64비트 ARMv8도 지원합니다.



달빅과 ART는 근본적으로 앱의 실행방식이 다릅니다.


현재의 달빅은 오리지날 앱 코드의 일반적인 버전인, 바이트 코드를 해석하기 위해 JIT(Just-in-time) 컴파일러에 의존하고 있습니다.


이러한 방법의 단점은 앱 실행중에 컴파일을 해야하므로 cpu에 부하가 걸리는 단점이 있지만, 하드웨어와 cpu의 아키텍처에 의존하지 않고 다양한 단말기에서 사용할 수 있는 장점이 있습니다.


하지만 ART는 이 과정을 앱이 처음 설치될 때 바이트코드를 기계 언어에 포함시켜서, 

진정한 네이티브 앱으로 작동하게 변경하도록 만들어졌습니다.


AOT(Ahead-of-time) 컴파일이라고 불리는 것인데요, 

응용 프로그램을 실행할 때 변환 없이 실행되므로 달빅보다 응용 프로그램의 실행 성능이 향상될 수 있는 장점이 있습니다.


현재 ART는 안드로이드 4.4이상의 버전을 사용중이라면 "설정>개발자옵션>런타임 선택>ART사용"으로 전환할 수 있고, 

전환 후 리부팅을 통해서 새로운 런타임을 위해 앱의 최적화 작업이 수행된 후 이용하실 수 있습니다.


새롭게 추가된 런타임인 ART는 대부분의 앱 실행 시 더 빠른 동작을 수행하고, CPU의 부하가 적기 때문에 배터리리의 수명과 퍼포먼스향상에 도움을 준다고 합니다.



현재 ART의 단점은 오픈 기간이 짧다는 것과 실행공간이 더 많이 필요로 한다는 것입니다.

(실행공간이야 하드웨어의 발달로 해결이 되겠지만, 새로운 컴파일러를 익히고 개발하고 기존 앱을 다시 수정해야하는 번거로움을 앱 제작사들이 얼마나 빠르게 넘어오느냐가 관건인 것 같습니다.)


거의 모든 앱은 달빅에 최적화가되어 있기 때문에 기존에 잘 동작하던 앱이 실행되지 않거나 앱을 손상시킬 수 있으며, 시스템을 불안정하게 할 수도 있다고 구글에서는 경고하고 있습니다.


전환은 사용자의 몫입니다.

댓글