[Android] ART???

2014. 12. 27. 20:43Basic/etc

반응형


ART, Android Runtime from Kitkat( 4.4 )


기존의 안드로이드에서는 DEX file 을 Dalvik machine 위에 올리는 방식이었는데,

Kitkat ( 4.4 ) 부터는 ART machine 위에서 OAT file 을 돌리는 것이 가능해졌다.

기존의 dex 파일을 dex2oat 라는 converter 를 이용해서 converting 하여 생성하고 run 한다.


Dalvik 은 앱 코드를 네이티브 기계어 코드로 변환한다.

사용자가 앱을 실행할 때마다 이 변환 절차가 필요한데 이를 JIT( just-in-time ) 컴파일이라고 한다.

이 방식은 다양한 하드웨어나 아키텍쳐에서 실행할 수 있는 장점이 있지만,

이 과정이 성능과 배터리에 나쁜 영향을 준다.


ART 는 Android RunTime 의 약자이며,

앱을 설치할 때 완전히 네이티브 앱으로 변환하여 설치한다. 이 과정을 Ahead-Of-Time( AOT ) 컴파일이라 한다.

ART 를 사용하면, 새로운 가상머신(Dalvik)을 매번 생성하고, 인터프리트 된 코드 실행하는 시간을 제거하여 performance 가 엄청 향상될 수 있다.

다시 말해 VM 자체가 필요없어, iOS 와 비슷한 성능의 이점을 얻을 수 있다는 것이다.



ART 를 사용함으로서 얻는 성능상 이점은 앱의 종류에 따라 다르다.

일부 앱은 약 2배의 속도 향상이 있었고( 보통 GPU 를 많이 사용하는 것 ), 일부 앱은 속도가 약간 더 느려지기도 한다. 하지만 전반적으로는 속도향상이 있었다.



현재는 Dalvik -> ART 를 할 경우,

반드시 재부팅을 해야 하고, OAT file 이 생성되지 않은 경우 이 파일들을 생성하는데 오랜 시간을 기다려야 할 수도 있다.


게다가 아직 호환성이 완벽히 보장되지 않기 때문에

Dalvik 에서는 제대로 작동하던 앱들이 ART 를 사용하면 죽는 현상이 자주 발생하기도 한다.



자바와 그 컴파일러에 대한 이해.


Java 언어의 철학 중 하나는 한번 프로그래밍을 하면, Platform 에 상관없이 실행 가능하게 하는 것.

Write Once, Run Everywhere 이라고도 부른다.


이것을 위해서 Java Virtual Machine( JVM ) 이란 장치를 만들어 놓는다.

Java 로 작성된 프로그램을 컴파일하면 JVM 이 읽을 수 있는 중간언어로 번역되고,

JVM 이 각 플랫폼 ( 소위 OS 라고도 하는 윈도우, 유닉스, 리눅스 등 )이 알아 들을 수 있는 언어로 번역해서 프로그램을 실행시킨다.


이런 번역의 과정을 실행할 때마다 거치기 때문에

태생적으로 Native 언어들에 비해 속도가 느리다는 단점이 있다.

그리고 언어가 발전하면서 이런 단점을 만회하기 위해 JIT ( Just-In-Time ) 컴파일러라는 장치가 추가된다.




JIT Compiler.


JVM 은 중간 언어를 읽어 들일 때 한줄 한줄 읽어들인다.

이런 방식의 컴파일러를 interpreter 라고 하는데,

JIT 는 인터프리터 형식으로 중간 언어를 읽지 않고, 프로그램이 실행될 때 한꺼번에 읽어서

한번에 Platform 이 알아들을 수 있는 언어로 번역을 한다.

한줄 한줄 읽는 Interpreter 방식에 비해 당연히 속도가 빠르긴 하지만, native 방식에 비해서는 여전히 속도가 느리다. ( 그래도 Interpreter 방식에 비해 약 10~20배 정도의 성능향상이 있다고 한다. )



Dalvik VM


안드로이드도 Java 언어를 사용하기 때문에 VM 을 이용해야 한다.

다만 라이선스 문제가 있어 일반 JVM 대신 Dalvik VM 이라는 것을 만들어 사용한다.

초기의 안드로이드는 Dalvik VM 에 JIT 가 포함되어 있지 않았지만,

진저브레드 ( 2.3 ) 부터는 JIT 가 포함되어 성능 향상이 있었다.

다만 JIT 컴파일러는 작동할 때 당연히 Interpreter 에 비해 CPU 와 RAM 등의 resource 를 많이 사용하기 때문에 배터리를 많이 소모하게 된다.


화면 전환이 많을수록 배터리 소모는 더 급격해지고,

한번에 읽기 때문에 화면 전환시 속도도 느리다는 단점이 있다고 한다.


출처 : http://aroundck.tistory.com/2599

반응형

'Basic > etc' 카테고리의 다른 글

JAVA언어 이름 규칙  (0) 2015.01.12
[Android] 생명주기 고급정보!  (0) 2014.12.27
[Android] Content Provider  (0) 2014.12.27
[Android] 무결성을 위한 앱 설계시 고려할 사항들  (0) 2014.12.27
[Android] ANR 이란?  (0) 2014.12.27