Foggy day

[Android] 안드로이드 런타임 본문

Android

[Android] 안드로이드 런타임

jinhan38 2021. 7. 27. 21:45

런타임(Runtime)

애플리케이션을 관리(메모리, 프로세스)하기 위해 컴파일러나 가상머신이 사용하는 기존 코드 라이브러리 혹은 프로그램이 실행되고 있는 동안의 동작

 

런타임 환경(Runtime Environment)

애플리케이션을 위한 서비스를 제공하는 가상머신 상태

 

안드로이드 런타임이란?(ART)

 

ART의 주요 기능은 크게 세가지가 있다.

1. AOT(Ahead Of Time)나 JIT(Just In Time) 컴파일

2. 최적화된 가비지 수집 CG

3. 전용 샘플링 프로파일러, 상세 진단 예외 및 크래시 보고, watchpoint를 생성하여 특정 필드를 모니터링 할 수 있는 기능을 포함한 디버깅 기능 지원

 

일반적인 컬파일러 언어는 CPU와 플랫폼 환경에 맞춰 기계어로 컴파일된다. 즉 인간이 이해할 수 있는 언어를 컴퓨터가 이해할 수 있도록 바꾸는 것이다. 자바의 특징은 바이트 코드로 저장되는데 이는 하나의 바이트 코드로 여러가지 CPU와 플랫폼 환경에서 구동되기 위해서이다. 이 바이트 코드로 컴파일 된 것을 실행하기 위해서는 JVM(Java Virtual  Machine)이 필요하다. 다시 말해 CPU와 플랫폼 환경에 맞는 가상 머신이 있다면 하나의 실행파일로 여러 환경에서 사용할 수 있다는 것이다. 그런데 안드로이드에서는 라이센스 문제 때문에 JVM을 그대로 쓸 수 없었다.

 

이러한 배경에서 안드로이드의 구조에 맞춰서 구동할 수 잇도록 만들어진 것이 달빅VM(Dalvik VM)과 ART다. 달빅VM은 구글에서 만들었다. 이 둘의 차이는 JIT컴파일러(달빅VM)을 사용하느냐 AOT컴파일러(ART)를 사용하는가로 나누어진다. 

 

안드로이드는 JIT을 이용해서 앱 실행 시 자바 코드가 일정부분 한번에 변환되어 RAM의 메모리에 올라간다. 이는 상당한 성능개성 효과를 가져왔다. 물론 문제점도 있다. JIT컴파일러가 돌아가는 동안에 하드웨어의 부하가 크게 발생하고, 배터리 소모가 심해졌다. 또한 실행부분 전체를 RAM에 상주시켜야 하기 때문에 많은 RAM을 사용한다.

 

이러한 부분을 해결하기 위해 만들어진 것이 ART이다. AOT(Ahead Of Time)는 JIT과 달리 애플리케이션 설치시 한 번에 컴파일하여 바이트코드로 변환해두고 있다가 프로그램 실행 시 변환된 코드를 읽어들이는 형태이다. 이를 바탕으로 ART는 JIT를 사용하는 달빅VM에 비해 압도적인 성능개선을 이루었따. 미리 컴파일 해놓은 덕분에 JAVA 어플리케이션으로의 문제점들이 많이 개선되었다. 물론 이 또한 단점이 있다. ART는 달빅 VM에 비해 1.5 ~ 2배의 설치공간이 필요하다. 이는 설치 시간을 더 느리게 만든다. 

JIT는 매번 필요한 부분에 대해서 컴파일 하지만 ART는 설치와 동시에 모든 컴파일 작업을 완료해두기 때문이다. 안드로이드에서는 앱 설치 시간을 단축하기 위해 최초 설치시에는 JIT를 사용하고, 충전중이거나 기기를 사요하지 않을 때, 대기모드 상태일 때 일부분 컴파일 작업을 실시해 점진적으로 AOT방식으로 바꿔나간다. 즉 달빅VM과 ART의 장점을 합친 것이다.