2. 안드로이드 앱 진단 환경의 이해 및 설치

2024. 12. 3. 09:00·기반 지식/Android

1. JVM & DVM

출처 : https://medium.com/android-news/virtual-machine-in-android-everything-you-need-to-know-9ec695f7313b

 

○ 자바 가상머신(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 )

Stack-based 출처 : https://www.codeproject.com/Articles/461052/Stack-Based-vs-Register-Based-Virtual-Machine-Arch

 

○ 연산할 때 스택을 사용함

○ PUSH, POP 연산자를 사용

○ 20과 7의 ADD 연산을 위한 명령어는 아래와 같다.

POP 20
POP 7
ADD 20, 7, result
PUSH result

 

Register-based 출처 : https://www.codeproject.com/Articles/461052/Stack-Based-vs-Register-Based-Virtual-Machine-Arch


○ 연산할 때 레지스터를 사용함
○ CPU 레지스터를 기반으로 피연산자가 저장됨
○ PUSH, POP 연산자가 없어 간단한 명령으로 진행

ADD R1, R2, R3

 

3. 안드로이드 런타임(Android Runtime, ART) - JIT & AOT 컴파일 비교

출처 : https://medium.com/android-news/closer-look-at-android-runtime-dvm-vs-art-1dc5240c3924

 

○ 퍼포먼스 개선 등을 위해 구글이 DVM에서 ART로 변경

○ 성능 향상을 위해 DVM의 "JIT컴파일" 프로세스를 "AOT 컴파일"로 변경

○ 2016 안드로이드 누가(7.0) 이후 ART에서는 JIT와 AOT 컴파일을 모두 사용

○ JIT와 AOT를 모두 사용해 설치시에는 무조건 JIT를 사용하고 차후 상황에 따라 유연하게 적용되어 사용됨

출처 : https://www.monarch-innovation.com/aot-vs-jit-compiler-in-angular

○ JIT(Just-In-Time) 컴파일

    ● 앱 최초 실행 시 컴파일을 수행해,  하드웨어 부하로 배터리 시간 등 부정적인 영향을 미침
    ● 장점 : 용량이 적다, 설치 속도가 빠르다.
    ● 단점 : 실행 속도가 느리다, 배터리 사용량이 많다, CPU 사용이 많다.

 

○ AOT(Ahead-of-time) 컴파일
    ● 2014 안드로이드 롤리팜(5.0 API 21) 이후 APT(AOT)가 적용

    ● 앱 설치 시점에서 컴파일을 수행해, 전력 소비를 줄이면서 성능을 2배로 향상 시킴
    ● 장점 : 실행 속도가 빠르다, 배터리 사용량이 적다, CPU 사용량이 적다.
    ● 단점 : 용량이 크다, 설치 속도가 느리다

 

JVM & DVM & APT

 

'기반 지식 > 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
'기반 지식/Android' 카테고리의 다른 글
  • 5. 녹스(Nox Player) 가상 애뮬 설치
  • 4. 안드로이드 앱 구조
  • 3. 안드로이드 디바이스 디렉터리 구조
  • 1. 안드로이드(Android)의 이해
real-again
real-again
realagin 님의 블로그 입니다.
  • real-again
    또또, 다시
    real-again
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로젝트
        • AOS 모바일 앱 모의해킹
        • Spring Boot 웹 애플리케이션 구축
        • [ESXi]인프라 구축 및 모니터링
        • 인프라 취약점 진단 고도화
      • CVE 분석
      • 기반 지식
        • AWS
        • 인프라
        • 웹 어플리케이션
        • Android
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    vlan
    브로트캐스트
    Snort
    owasp mobile top10
    EC2
    콘텐츠 프로바이더
    insecure authentication/authorization
    하드코드
    diva
    통신 과정 취약점 진단
    tocken
    android directory
    splunk #esm
    dvm
    app intsructure
    spring boot
    AWS
    pfsense
    sd스토리지
    aos정리
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
real-again
2. 안드로이드 앱 진단 환경의 이해 및 설치
상단으로

티스토리툴바