안드로이드는 초창기에 사용된 Dalvik 컴파일 방식과 그 이후에 도입된 ART 컴파일 방식 2가지로 나누어 진다.
안드로이드는 개발 언어가 Java로 채택되면서 JVM이 필요 했었는데,
라이센스 문제와 메모리 효율성등의 문제로 안드로이드는 Dalvik VM(=DVM)을 사용하게 됩니다.
그럼 그 라이센스 문제가 뭔데?
- Java ME를 사용하기 위해서 Sun 회사에게 라이센스 비용을 지불해야하는 문제가 발생했다.
- (DVM에서 컴파일 과정 중 .class를 .dex로 변환하는 dx 툴은 Java SE를 사용했기 때문에 Java 언어 사용은 문제되지 않았다.)
그럼 라이센스는 알겠는데.. 메모리 효율성은 뭐죠?
- JVM은 스택 기반 모델로 많은 메모리를 요구하지만 DVM은 레지스터 기반 모델로 적은 메모리에 최적화 되어 있다. (JVM에 비해 명령이 단순하고 처리 속도가 빠르다)
- 여러 개 VM 인스턴스를 실행할 수 있고, 프로세스 독립성, 메모리 관리 & 스레딩을 지원한다.
Java와 코틀린 언어가 컴파일 되는 과정
1. 자바(.java)와 코틀린(.kt)으로 구성된 파일이 존재
2. 각각의 javac 와 kotlinc에 의해서 자바 바이트 코드로 컴파일 된다.
3. 이 자바 바이트 코드는 jvm의 jit컴파일러에 의해서 기계가 이해 할 수 있는 기계어로 변환된다.
4. 해독된 기계언어를 메모리에 할당 후 cpu에 의해 실행된다.
Jvm을 사용한 컴파일 방식과 달리 안드로이드에서는 DVM(Dalvik Virtual Machine) 과 ART(Android Run Time)를 사용한다.
안드로이드의 컴파일 방식
위의 DVM은 JIT(Just in time) 방식을 사용하지만 ART(Android Runtime)은 AOT(Ahead Of Time)을 사용한다.
- JIT 방식은 앱 구동 중에 실시간으로 컴파일(기계어 번역)을 하기 때문에 설치 시 속도가 빠르지만 실행 시에 느리다는 단점이 있었다. 또한 번역한 정보를 메모리에 올려서 메모리 부하가 컸다.
- AOT방식은 앱 인스톨과 함께 네이티브 코드로 컴파일 되어 설치되어, 실행중에 컴파일을 할 필요가 없게 만들어, 빠른 성능을 보인다.가비지컬렉션, 디버그등 개선
JVM은 다양한 네이티브 언어를 지원하여 느리기 때문에 안드로이드에서는 JVM방식에서 DVM 방식으로 바꾼 것이다.
'Android' 카테고리의 다른 글
Android BottomNavigation Bar Round효과 (0) | 2022.08.02 |
---|---|
안드로이드 액티비티간 화면 전환 및 데이터 전달 (Intent) - Kotlin (0) | 2022.07.25 |
[Android ]Progress Bar - Kotlin (0) | 2022.07.25 |
[Kotlin] 코틀린에서의 변수 사용법 (2) | 2022.07.07 |
코틀린으로 레이아웃 연결하기 (뷰 바인딩) (0) | 2022.07.04 |