Intro.
이번 글은 JVM, DVM, ART에 대해 얕은 지식을 공유해보려 한다.
과거 안드로이드를 공부할 때 이론이나 운영체제 공부보단,
프래임워크를 먼저 접해보고 기능 구현을 먼저 했던 터라 이론적인 내용이 너무 부족하였다.
때문에 이것저것 공부하던 도중 JVM과 Dalvik, ART가 튀어나왔다.
뭐 실행을 도와주는 녀석들인것같은데 조금 깊게 볼 필요가 있을것같았다.
JVM
Java virtual Machine 가상머신
- JVM은 자바 가상 머신으로, 자바 컴파일러를 통해 생성된 .class 파일(자바 바이트코드)을
JVM 내부에 있는 JIT(just in time) 컴파일러를 통해 기계어로 바꿔주는 역할을 담당한다. - 즉, 자바 코드를 실행시켜주는 녀석이고, JVM으로 인해 JAVA는 운영체제에서 종속성을 벗어날 수 있었다.
- JVM 내부 JIT 컴파일러를 이용해 기계어로 바꿔줌.

https://pudroid.tistory.com/1 에서 보다 자세히 설명하고 있으니 참고바람.
그러나,
JVM은 데스크탑, 노트북 등을 위해 나온 녀석이기에 JAVA언어로 먹고 살려는 Android에서는 부적합 하였다.
+ 저작권 문제..
그래서 Android 운영체제를 개발한 Google에서 선보인게 바로 DVM
DVM
Dalvik Virtual Machine 가상머신
- 자바 바이트코드로 변환하는것 까지는 동일하지만, 그 이후 JVM을 통해 저급언어로 변환되는것이 아닌
여러 개의 자바 바이트코드 파일들이 dex 컴파일러를 거쳐 하나의 .dex 파일로 변경시킴. - 리소스가 포함된 기타 라이브러리 + .dex 를 합쳐 APK라 부름.(android application package)

- JVM은 스택 기반 모델 인것에 반해 DVM은 레시즈터 기반 모델 사용. 비교적 적은 메모리 사용을 요구하기 때문에 빠르게 동작!!
- JVM과 마찬가지로 JIT 컴파일러를 사용하여 기계어로 번역함.
- JIT 방식은 앱 구동중에 실시간으로 컴파일을 시켜 기계어로 번역하기 때문에 앱 실행속도가 느리다는 단점이 존재하였다.
- 또한 번역한 데이터를 메모리에 올리기에 메모리 부하가 컸다.
Dalvik을 사용하다보니 앞서 설명한 문제점이 존재했다.
1. 앱 실행속도 느림
2. 메모리 부하가 큼
그래서 나온것이 ART
ART
- Android Run Time 라이브러리
- 기계어로 해석된 앱을 실행시키기 위해 런타임 시 사용되는 라이브러리.
- DVM의 JIT 컴파일 방식의 단점을 보완하기 위해 만들어졌음.
- AOT(Ahead Of Time) 컴파일 방식을 사용함.
- 최초 설치 시 컴파일을 미리 해버리기 때문에 최초 설치 속도가 느림
- 대신 실행 도중 컴파일 과정이 없기 떄문에 CPU 사용량이 줄고 빠름 + 배터리 수명 향상
- 번역 정보를 파일에 저장하기 때문에 설치 용량이 이전 JIT방식보다 많아짐.
- 설치 시점에서 기계어로 번역하기 때문에 실행시 한줄한줄 컴파일 해 사용하는 인터프리터방식의 DVM이 필요없어졌다.
학부생 레벨에서 쓴 글로, 다소 부족한 부분이 있을 수 있으니 친절한 피드백을 매우 환영합니다.
'Android' 카테고리의 다른 글
| [Android] Fragment의 정의와 필요성, Lifecycle 및 이에 따른 대응. (0) | 2023.06.25 |
|---|---|
| [Android] Activity Lifecycle 과 화면회전 시 변화 (0) | 2023.06.22 |
| [Android] Activity 가 있는데 Fragment는 왜 써? (0) | 2023.06.05 |
| [Android] 메모리 영역과 JVM Garbage Collecter (JVM, DVM, ART) (0) | 2023.05.22 |
| [Android] JVM란 무엇일까? (0) | 2023.04.05 |