글

라벨이 oat인 게시물 표시

안드로이드 컴파일러 (JIT 컴파일러와 AOT 컴파일러)

이미지
1. Java Compiler 소스코드(.java)를 바이트코드(.class)로 번역한다. 2. android apk build 과정 .java → .class → .dex → .apk → 서명 및 최적화 → release - java compiler에 의해 .class 파일로 컴파일 - 생성된 .class 파일을 android DX tool을 통해 .dex로 변환 - .dex과 resource를 합쳐 .apk로 압축 3. JIT Compiler (Just In Time) → Dalvik 실행 시점에 바이트코드(.dex)를 기계어로 번역한다. 인터프리터 방식의 언어들이 성능 향상을 목적으로 도입하는 경우가 많으며, 자주 사용되는 코드는 매 번 번역하지 않고, 캐싱하여 성능을 개선한다. 메소드 단위로 JIT 컴파일하는 방식과 실행 흐름을 실시간으로 추적하며 컴파일하는 Tracing JIT 방식으로 분류된다. 용량↓, 설치속도↑, 실행속도↓, 배터리 사용↑, CPU 사용↑ 4. AOT Compiler (Ahead Of Time) → Android RunTime 설치 시점에 기계어로 번역한다. 용량↑, 설치 속도↓, 실행 속도↑, 배터리 사용↓, CPU 사용↓ Dalvik은 dexopt를 통해 dex 파일을 최적화한 odex(optimized dex)를 만든다. odex는 특정 시스템에 최적화된 코드로 다른 시스템(기기)에서는 사용할 수 없다. DVM은 odex 파일을 앱 실행시 기계어로 번역한다. ART는 AOT 컴파일 시 dex2oat를 통해 dex → odex → oat로 변경한다. oat 파일은 elf 파일 형식의 기계어를 포함하는 파일이다. oat 파일은 기계어로 완전히 번역된 파일이기 때문에 VM없이도 바로 실행가능하나, Dalvik과의 호환성을 위하여 VM 위에서 돌아가는 것처럼 실행된다. L-OS(5.0, API 21)부터 ART(AOT)가 적용되었으며, N-OS(7.0, AP...

이 블로그의 인기 게시물

아스키 코드(ASCII)와 유니코드(unicode)

Kubernetes 학습 노트

Innovation or Threat? Why Tech Giants Are Issuing a Total Ban on OpenClaw (혁신인가, 위협인가? 테크 거물들이 오픈클로를 전면 금지하는 이유)