Skip to content

Latest commit

 

History

History
35 lines (31 loc) · 2.69 KB

runtime.md

File metadata and controls

35 lines (31 loc) · 2.69 KB

Process Virtual Machine

  • 하나의 프로세스의 처리를 위해 생성된 가상 컴퓨터
  • 하나의 코드로 다른 환경의 컴퓨터에서도 동일하게 작업을 수행
  • 가상화 정도에 따라 에뮬레이션, 가상화, 반가상화로 나뉨
    • 에뮬레이션: 범용성을 최대로 하여 모든 기능을 소프트웨어적으로 구현
    • 가상화: 범용성을 일부 포기하고 성능을 올리기 위해 CPU 등 주요 하드웨어 기능을 이용
    • 반가상화: 범용성을 완전히 포기하고 성능을 올리기 위해 운영체제나 하드웨어 드라이버에 직접 접근
  • 시스템의 명령어를 그대로 실행해도 무방할 경우 그대로 사용하고, 불가능할 경우에만 에뮬레이션

JVM

  • 자바로 개발한 프로그램을 실행시키기 위한 가상 컴퓨터
  • 런타임에 인터프리트 과정으로 바이트 코드를 목적 코드로 변경하여 프로그램을 실행
  • 가상 컴퓨터를 이용하기 때문에 다른 컴파일 기반보다 범용성은 좋지만 성능은 좋지 않음

DalvikVM

  • JVM 라이선스 문제를 회피하기 위해 개발된 안드로이드 전용 가상 컴퓨터
  • dex 파일을 odex 파일로 변경하여 프로그램을 실행
    • dex: 달빅 가상 컴퓨터에서 실행 가능한 파일
    • odex: dex 파일을 목적 실행 가능한 형태로 컴파일한 파일
  • 여러개의 dex 파일로 나누어 압축하는 형태로 전체 APK 파일 크기를 줄일 수 있음
    • 앱의 다운로드 및 설치 시간 축소
    • 필요한 클래스 및 메소드가 포함된 부분만 로드하여 실행 성능 향상 및 메모리 사용량 감소
  • JIT 컴파일이 적용되어 런타임에 필요한 컴파일 시간을 단축
    • 자주 사용하는 바이트 코드를 실행 시점 전에 목적 코드로 컴파일
    • 사용하지 않는 코드가 실행되기 전에 메모리에 적재
    • 배터리 소모량과 메모리 사용량 증가

ART

  • 안드로이드 4.4 버전 이후 등장, 5.0 버전에서 기본이 된 새로운 방식의 가상 컴퓨터
  • AOT 컴파일을 이용하여 앱 설치 시점에 목적코드로 컴파일 및 저장
  • 설치 시간과 프로그램의 크기가 늘어났지만 런타임에 필요한 컴파일 시간을 줄여 실행 시간 단축
  • 기존 DalvikVM의 단점인 실행 속도가 느린 부분과 많은 메모리 사용량 개선
  • 안드로이드 8.0 이후에는 베이스라인 프로파일을 통해 AOT와 JIT 방식을 조합하여 성능 개선

runtime