안드로이드 런타임 VM의 변화에 대해서 공부해 보았습니다.
안드로이드 런타임은 다음과 같이 변화되어 왔습니다.
- 런타임이란: 컴퓨터 프로그램이 실행되고 있는 동안의 동작을 말합니다.
Dalvik 은 JIT 와 컴파일러를 사용
- 앱을 실행시 자바코드를 한꺼번에 변환 후에 RAM에 올려 사용합니다. 기존 JVM보다는 빠르게 실행되지만 CPU, RAM등의 자원소모가 큽니다
- Dalvik을 사용하던 시점에는 안드로이드 폰이 256mb정도 되는 램을 가지고 있었기 때문에 부족한 자원때문에 새로운 런타임 이 필요해졌습니다.
- 또한 Dalvik 은 GC가 끝나기 전까지는 모든 동작을 중지 시켰기 때문에 더욱더 앱이 느리게 동작하는것처럼 느껴집니다.
위와 같이 16ms 안에 모든 일들이 일어나야 하지만 Dalvik은 GC가 일어나게 되면 16ms를 초과하는 경우가 종종 생기기 때문에 더욱 유저에게 안좋은 경험을 제공하게 됩니다.
Art 는 AOT(Ahead-Of-Time)
- Art는 앱을 설치할때 AOT 컴파일러로 바이너리 코드로 변환해 앱 실행마다 바이너리 코드를 실행할 수 있기 때문에 JIT보다는 빠르게 동작하고 실행되지만 더 많은 저장 공간이 필요하다는 단점이 생기게 되었습니다.
- Art GC는 병렬적으로 동작하기 때문에 생각보다 짧은 GC 멈춤이 일어납니다
그림만 보더라도 실제 달빅보다 ART가 훨씬 GC 길이가 짧은것을 확인할 수 있습니다.
Nugat 이후
- JIT 와 AOT 하이브리드
- Nugat 이후에는 AOT 와 JIT가 함께 사용되고 있는데
- 유저가 어떤 앱을 많이 사용하는지 profile 분석을 통해서 항상 사용되는 앱은 미리 컴파일이 되어있고 사용이 적은 앱은 사용할때마다 컴파일을 시키는 방식으로 변화되었습니다.
Pie 이후
- 앱 스토어에서 앱 사용자들이 어떤앱을 많이 사용하는지 등 통계적인 정보를 가지고 AOT와 JIT 중 어떤 컴파일러를 사용할지에 대한 결정을 하게 됩니다.
reference
- https://www.youtube.com/watch?v=0J1bm585UCc
- https://www.youtube.com/watch?v=OrLEoIsMIAc&list=PLOU2XLYxmsIKEOXh5TwZEv89aofHzNCiu&index=60
728x90
최근댓글