1. JVM & DVM
○ 자바 가상머신(Java Virtual Machine, JVM - Stack-based )
● JVM은 "자바 바이트 코드"를 실행하기 위한 자바 가상 머신
● "자바 바이트 코드"는 JVM이 이해할 수 있는 언어로 JVM만 설치되어 있으면, 어떤 운영체제서도 실행 가능
● 즉, 운영체제에 상관없이 JVM이라는 가상 머신에서 "자바바이트" 코드를 실행할 수 있음
● JVM은 플랫폼에 의존적
- 리눅스, 윈도우, macOS 등 각각의 운영체제에서 JVM은 각각 다름
● "자바 바이트 코드"는 플랫폼에 독립적
- 컴파일된 자바 바이트 코드는 어떤 JVM에서든 동작이 가능함
● 정리 : JVM 플랫폼은 다를 수 있지만, "자바 바이트 코드"는 어떠한 플랫폼이든 동작한다.
○ 달빅 가상 머신(Dalvic Virtual Machine, DVM - Register-based )
● "안드로이드 애플리케이션"을 실행하기 위한 달빅 가상 머신
● 즉, 자바 바이트코드를 모바일 앱에 최적화 된 "달빅 바이트코드"로 변경하여 DVM에서 동작하도록 함
● 모바일 디방이스 환경에 최적화되어 개발된 가상 머신으로 낮은 메모리에서 실행되도록 설계됨
- 배터리 수명
- 성능 문제 (데스크탑 & 모바일 디바이스)
● DEX 컴파일러가 class 파일을 dex 파일로 변경하여 DVM에서 실행 가능하게 생성
- .class 파일은 자바 바이트 코드
- ..java 파일은 자바 소스 코드
● .java > .class > .dex 변환 후 DVM에서 동작
● Dalvik의 명령어 수가 더 적고, 코드 길이는 더 길다. (효울성과 속도)
2. Stack-based VS Register-based
○ 자바 가상머신(Stack-based )
○ 달빅 가상 머신(Register-based )
○ 연산할 때 스택을 사용함
○ PUSH, POP 연산자를 사용
○ 20과 7의 ADD 연산을 위한 명령어는 아래와 같다.
POP 20
POP 7
ADD 20, 7, result
PUSH result
○ 연산할 때 레지스터를 사용함
○ CPU 레지스터를 기반으로 피연산자가 저장됨
○ PUSH, POP 연산자가 없어 간단한 명령으로 진행
ADD R1, R2, R3
3. 안드로이드 런타임(Android Runtime, ART) - JIT & AOT 컴파일 비교
○ 퍼포먼스 개선 등을 위해 구글이 DVM에서 ART로 변경
○ 성능 향상을 위해 DVM의 "JIT컴파일" 프로세스를 "AOT 컴파일"로 변경
○ 2016 안드로이드 누가(7.0) 이후 ART에서는 JIT와 AOT 컴파일을 모두 사용
○ JIT와 AOT를 모두 사용해 설치시에는 무조건 JIT를 사용하고 차후 상황에 따라 유연하게 적용되어 사용됨
○ JIT(Just-In-Time) 컴파일
● 앱 최초 실행 시 컴파일을 수행해, 하드웨어 부하로 배터리 시간 등 부정적인 영향을 미침
● 장점 : 용량이 적다, 설치 속도가 빠르다.
● 단점 : 실행 속도가 느리다, 배터리 사용량이 많다, CPU 사용이 많다.
○ AOT(Ahead-of-time) 컴파일
● 2014 안드로이드 롤리팜(5.0 API 21) 이후 APT(AOT)가 적용
● 앱 설치 시점에서 컴파일을 수행해, 전력 소비를 줄이면서 성능을 2배로 향상 시킴
● 장점 : 실행 속도가 빠르다, 배터리 사용량이 적다, CPU 사용량이 적다.
● 단점 : 용량이 크다, 설치 속도가 느리다
'기반 지식 > Android' 카테고리의 다른 글
6. 모바일 취약점 진단 항목 (0) | 2024.12.09 |
---|---|
5. 녹스(Nox Player) 가상 애뮬 설치 (0) | 2024.12.06 |
4. 안드로이드 앱 구조 (0) | 2024.12.05 |
3. 안드로이드 디바이스 디렉터리 구조 (1) | 2024.12.04 |
1. 안드로이드(Android)의 이해 (0) | 2024.12.02 |