우찬쓰 개발블로그

안드로이드 역사 (Dalvik VM, ART VM) 본문

안드로이드

안드로이드 역사 (Dalvik VM, ART VM)

이우찬 2022. 6. 8. 18:11
반응형

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 

 

JIT 컴파일 - 위키백과, 우리 모두의 백과사전

JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 전통적인 입장에서 컴퓨터 프로그램을 만드는 방법은 두

ko.wikipedia.org

https://ko.wikipedia.org/wiki/AOT_%EC%BB%B4%ED%8C%8C%EC%9D%BC

 

AOT 컴파일 - 위키백과, 우리 모두의 백과사전

AOT 컴파일(ahead-of-time compile)은 목표 시스템의 기계어와 무관하게 중간 언어 형태로 배포된 후 목표 시스템에서 인터프리터나 JIT 컴파일 등 기계어 번역을 통해 실행되는 중간 언어를 미리 목표

ko.wikipedia.org

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

 

안드로이드 런타임 - 나무위키

ART 적용 이전에도 코드 보안이나 성능 보장이 매우 중요한 앱 개발은 NDK를 이용한 C/C++ 프로그래밍을 통해 이루어져 왔다. 상용 앱 내부에는 앱에 따라서 어느 정도 네이티브 코드가 포함되어 있

namu.wiki

https://118k.tistory.com/250

 

[개념] 달빅과 ART(JIT 컴파일러와 AOT컴파일러)

[컴파일러] 고급언어로 쓰여진 프로그램이 컴퓨터에서 실행되기 위해서는 컴퓨터가 직접 이해할 수 있는 언어로 바꾸어 주어야 한다. 이런 역활을 하는 프로그램이 컴파일러 이다. 고급언어는

118k.tistory.com

 

반응형
Comments