우찬쓰 개발블로그
안드로이드 역사 (Dalvik VM, ART VM) 본문
1. 자바 코드는 바이트 컴파일러에 의해 바이트 코드로 변경된다.
2. 바이트 코드는 이미 최적화가 되어있는 중간 언어이므로 손쉽게 기계어로 변경 가능하다. (JIT 컴파일러등에 의해)
3. 2.2 프로요 전 까지는 앱이 구동되는 와중에 실시간으로 자바 코드를 CPU에 맞게 변환되었다.
4. 2.2 프로요 부터는 JIT컴파일러 도입. 코드 최초 실행 시점에 바이트 코드를 기계어로 변경하고 캐시에 저장했다.
5. JIT(Just In Time)컴파일은 실행시점에 소스코드를 번역한다. 설치는 빠르지만 실행시점에 느리다. 번역한 정보를 메모리에 올려야 하기 때문에 메모리를 많이 먹는다.
6. AOT(Ahead Of Time)컴파일은 설치시점에 소스코드를 번역한다. 설치가 느리고, 번역을 해서 따로 파일을 저장하기 때문에 용량을 많이 먹게 된다. 하지만 실행시점에 미리 번역한 파일을 실행하므로 빠르게 실행이 가능하다.
7. 킷캣(4.4)이전까지는 달빅VM을 사용했다.(킷캣에서 기기 설정 변경시 ART최초 사용은 가능) JVM은 오라클 소유로, 라이선스 분쟁을 피하기 위해서이다.
8. 5.0 롤리팝 버전 이후부터는 ART(Android Run Time) VM을 사용했다. AOT 컴파일러가 기본으로 적용되어 프로그램 최초 실행시가 아닌, 그 이전에(주로 설치시에) 한번에 전체를 변환해 두고 저장한 뒤, 프로그램 실행시 마다 변환된 코드를 읽어들이게 된다.
9. 7.0 누가 이후에서는 JIT과 AOT를 동시 적용하게 되었다. 최초 설치시에는 JIT를 사용하여 설치 속도를 높이고, 차후 기기를 사용하지 않을 때나 충전 중일 경우 컴파일을 조금씩 하여, 자주 사용되는 앱을 AOT 방식으로 전환하는 것으로 바뀌었다. 즉, 양 방식의 장점을 합치고 단점을 극복하려 시도한 것이며 실제로 애플리케이션의 설치 속도가 기존 AOT 방식에 비해 매우 빨라졌다. 단, 용량 문제는 여전하다.
https://ko.wikipedia.org/wiki/JIT_%EC%BB%B4%ED%8C%8C%EC%9D%BC?tableofcontents=0
https://ko.wikipedia.org/wiki/AOT_%EC%BB%B4%ED%8C%8C%EC%9D%BC
https://namu.wiki/w/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%20%EB%9F%B0%ED%83%80%EC%9E%84
'안드로이드' 카테고리의 다른 글
Activity + Fragment Lifecycle (0) | 2023.08.21 |
---|---|
클린 아키텍처 (원본 블로그 번역) (0) | 2022.09.07 |
mac terminal에서 android studio를 실행하기 (0) | 2022.02.08 |