AOT — bu nədir, Ahead-Of-Time kompilyasiyası və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-04-16 Oxuma vaxtı: 9 dəq

AOT (Ahead-Of-Time) — kompilyasiya texnologiyasıdır, burada mənbə kodu və ya bayt-kodu proqramın işə salınmasından əvvəl, qurma və ya quraşdırma mərhələsində maşın təlimatlarına çevrilir. Android-də AOT kompilyasiyası ART icra mühitinin əsas innovasiyası oldu və Dalvik-i 5.0 Lollipop versiyasında əvəz etdi. Google, 2024 məlumatlarına görə, ART-də AOT kompilyasiyası istiləşmə gecikmələrini aradan qaldırır və tətbiqlərin enerji sərfiyyatını JIT yanaşması ilə müqayisədə 10–15% azaldır.

Əsas məqamlar

  • AOT — Ahead-Of-Time kompilyasiyası: kodun proqram işə salınmazdan əvvəl maşın dilinə çevrilməsi.
  • Android-də AOT dex2oat vasitəsi ilə APK quraşdırılması zamanı və ya fon rejimində icra olunur.
  • AOT-nin əsas üstünlüyü — istiləşmə fazası olmadan ani işəsalma.
  • Çatışmazlıq — quraşdırma vaxtının artması və diskdə əlavə 15–30% həcm.
  • Müasir sistemlər hibrid yanaşma istifadə edir: ilk işəsalmalar üçün JIT, hot-metodlar üçün AOT.

AOT kompilyasiyası nədir?

Ahead-Of-Time (AOT) — proqramın işə salınmasından əvvəl maşın koduna çevrildiyi kompilyasiya üsulu. "Ahead-Of-Time" termini JIT (Just-In-Time) ilə ziddiyyət təşkil edir: əgər JIT "vaxtında" kompilyasiya edirsə, AOT — "əvvəlcədən". AOT kompilyatoru girişdə mənbə kodu və ya aralıq təsviri (bayt-kodu) alır və işə salınmağa hazır olan icra olunan fayl yaradır.

AOT tarixi ənənəvi C və C++ kompilyatorlarına gedib çıxır, burada kompilyasiya həmişə işə salınmadan əvvəl həyata keçirilir. İdarə olunan dillər (Java, C#, Dart) kontekstində AOT daha gec bir innovasiyadır: uzun müddət dinamik imkanların (refleksiya, siniflərin dinamik yüklənməsi) AOT-ni çətin reallaşdırılan etdiyi düşünülürdü. Google Android üçün dex2oat yaradaraq bu problemi həll etdi — DEX bayt-kodunu yerli koda çevirən AOT kompilyatoru.

AOT-nin iş prinsipi

AOT kompilyatoru tam tərcümə dövrü həyata keçirir. Birinci mərhələ — pars etmə və abstrakt sintaksis ağacının (AST) qurulması. İkinci — analiz və optimallaşdırma: ölü kodun silinməsi, inline etmə, dövr optimallaşdırması. Üçüncü — hədəf arxitektura (ARM, ARM64, x86) üçün maşın kodunun yaradılması. Nəticə icra zamanı əlavə emal tələb etməyən icra olunan fayldır.

bash
# AOT kompilyatoru dex2oat-ın əl ilə işə salınması
dex2oat --dex-file=classes.dex \
        --oat-file=classes.oat \
        --arch=arm64 \
        --instruction-set-variant=generic

# Kompilyasiya edilmiş OAT faylının yoxlanılması
oatdump --oat-file=classes.oat --output=oat_dump.txt

Android-də AOT: dex2oat və OAT faylları

Android-də AOT kompilyasiyası dex2oat (dalvik executable to optimized android translator) vasitəsi ilə həyata keçirilir. İstifadəçi tətbiqi quraşdırdıqda, sistem dex2oat-ı işə salır, APK-dan DEX fayllarını oxuyur, bayt-kodu optimallaşdırır və OAT faylı — yerli kodlu ELF binar faylı yaradır. Bu fayl /data/dalvik-cache/ bölməsində saxlanılır.

Kompilyasiya prosesi bir neçə optimallaşdırma səviyyəsini əhatə edir. Əsas səviyyə — bayt-kodun yoxlanılması və əsas optimallaşdırmalar (dead code elimination, constant folding). Orta — metodların inline edilməsi, loop unrolling, escape analizi. Maksimum — bütün tətbiqin qlobal optimallaşdırmaları, o cümlədən devirtualizasiya və yığın ölçüsünün optimallaşdırılması. Optimallaşdırma səviyyəsi kompilyasiya rejimindən asılıdır (speed, speed-profile, space).

OAT faylının strukturu

OAT faylı ELF (Executable and Linkable Format) formatına malikdir — yerli Linux binar fayllarının istifadə etdiyi eyni format. OAT faylının daxilində tətbiqin hər metodu üçün kompilyasiya edilmiş kod, həmçinin metadata: siniflər, sahələr, metodlar və onlar arasındakı əlaqələr haqqında məlumatlar var. ART bu metadatadan siniflərin sürətli yüklənməsi və DEX-in tam pars edilmədən simvolik istinadların həlli üçün istifadə edir.

OAT komponentiTəyinat
ELF headerELF formatının başlığı
Code sectionKompilyasiya edilmiş metodların maşın kodu
OAT headerART metadata: versiya, bölmə ölçüləri
DEX sectionsRefleksiya üçün orijinal DEX məlumatları
Link tableJNI və yerli kitabxanalar üçün əlaqə cədvəli

AOT vs JIT: müqayisəli analiz

AOT və JIT performans və elastiklik arasında müxtəlif kompromis nöqtələrini təmsil edir. AOT ilk saniyədən maksimum icra sürətini təmin edir, lakin daha çox disk sahəsi və quraşdırma vaxtı tələb edir. JIT yer və quraşdırma vaxtına qənaət edir, lakin bunun əvəzində istiləşmə gecikməsi və pik enerji sərfiyyatı ilə ödəyir.

Seçimin əsas amili — istifadə ssenarisidir. Bir dəfə işə salınıb uzun müddət işləyən tətbiqlər (oyunlar, redaktorlar, naviqatorlar) üçün AOT üstünlük təşkil edir — kompilyasiya xərcləri sabit performans hesabına ödənilir. Nadir hallarda və qısa müddətə işə salınan kiçik vasitələr üçün JIT daha sərfəli ola bilər — sürətli quraşdırma və az yer pik performansdan daha önəmlidir.

MeyarAOTJIT
İşəsalmaAniİstiləşmə ilə
QuraşdırmaDaha uzun (kompilyasiya)Sürətli
Disk sahəsi+15–30%Minimal
Enerji sərfiyyatıSabitKompilyasiyada pik
AdaptivlikAşağıYüksək

Kodun performansı

Maraqlı nüans: AOT kodu həmişə JIT-dən sürətli deyil. JIT icra vaxtı profil məlumatlarına — obyektlərin dəqiq tiplərinə, çağırış tezliklərinə, real budaqlanma nümunələrinə çıxışa malikdir. Bu, AOT üçün əlçatmaz optimallaşdırmaları (məsələn, profil idarəli inline) tətbiq etməyə imkan verir. Praktikada AOT və JIT arasında kompilyasiya edilmiş kodun performans fərqi ssenaridən asılı olaraq ±5–10% təşkil edir.

AOT kompilyasiyasının üstünlükləri

AOT mobil tətbiqlər üçün üç əsas üstünlük təmin edir. Birinci — proqnozlaşdırıla bilən performans. İstifadəçi işin ilk saniyələrində "ləngimələr" görmür: tətbiq maksimal sürətlə ilk kadrdan işləyir. Bu, oyunlar, animasiyalar və hamar keçidli interfeyslər üçün kritik əhəmiyyət daşıyır.

İkinci — enerji səmərəliliyi. AOT JIT kompilyasiyasına xas olan CPU pik yüklərini yaratmır. Prosessor sabit rejimdə işləyir, bu da tətbiqin ilk 30–60 saniyəsində enerji sərfiyyatını 10–15% azaldır. Gündə 20–30 tətbiq işə salan tipik istifadəçi üçün bu, batareya iş vaxtında nəzərəçarpacaq artım verir.

İcra mühitinin sadələşdirilməsi

AOT kompilyasiyası icra mühitini sadələşdirir. Bütün kod artıq kompilyasiya edildikdə, icra zamanı JIT kompilyatoruna, interpritatora və profilçiyə ehtiyac qalmır. Bu, icra mühitinin ölçüsünü azaldır və səhv ehtimalını aşağı salır. Tam AOT rejimində ART aktiv JIT ilə analoji mühitdən təxminən 15% az RAM tutur.

AOT kompilyasiyasının çatışmazlıqları

AOT-nin əsas çatışmazlığı — quraşdırma vaxtı. Android 5.0 ilə ilk cihazlarda böyük tətbiqlərin (100–200 MB) quraşdırılması AOT kompilyasiyası səbəbindən 2–5 dəqiqə çəkə bilərdi. Bu, mənfi istifadəçi təcrübəsi yaradırdı: APK endirildikdən sonra tətbiqi açmadan əvvəl gözləmək lazım idi. Google bu problemi Android 7.0-da hibrid sxemə keçərək qismən həll etdi.

İkinci çatışmazlıq — tutulan yer. OAT faylları orijinal DEX fayllarından 15–30% böyükdür. 8–16 GB daxili yaddaşa malik cihazlarda hər tətbiq sistem bölməsində əlavə yer "yeyir". Çox sayda quraşdırılmış tətbiqi olan istifadəçilər (50–100) üçün bu, sistem yeniləmələri üçün yer çatışmazlığına səbəb ola bilər.

Adaptivliyin olmaması

AOT kodu kompilyasiya anında fiksasiya olunur. Əgər tətbiq Android versiyasından, cihaz modelindən və ya istifadəçi parametrlərindən asılı olaraq müxtəlif icra nümunələri istifadə edirsə, AOT uyğunlaşa bilmir. Bir ssenari üçün seçilmiş optimallaşdırmalar digəri üçün qeyri-optimal ola bilər. JIT bu baxımdan daha çevikdir: icra şərtləri dəyişdikdə hot-metodları yenidən kompilyasiya edir.

Android xaricində AOT: Flutter, .NET, Go

AOT kompilyasiyası təkcə Android-də deyil, həm də digər platformalarda tətbiq olunur. Flutter Dart kodunu iOS və Android üçün yerli koda kompilyasiya etmək üçün AOT-dan istifadə edir. Bu, hətta zəif cihazlarda 60 fps səviyyəsində UI performansını təmin edir. İnkişaf mərhələsində Flutter JIT (hot reload) istifadə edir, release qurması üçün isə AOT — hər iki yanaşmanın üstünlüklərini birləşdirir.

.NET ekosistemində ReadyToRun (R2R) texnologiyası yığınları əvvəlcədən yerli koda kompilyasiya etməyə imkan verir. Bu, .NET tətbiqlərinin işəsalma vaxtını 30–50% qısaldır. Go kompilyatoru ilkin olaraq AOT kompilyatorudur: Go proqramları xarici asılılıqlar olmadan bir statik binar fayla kompilyasiya olunur, bu da onları konteyner mühiti üçün ideal edir.

dart
// Flutter: Dart kodunun yerli koda AOT kompilyasiyası
// Release qurması AOT istifadə edir
flutter build apk --release

// Nəticə: AOT ilə kompilyasiya edilmiş Dart kodu olan libapp.so
// İnkişaf JIT (hot reload) istifadə edir
flutter run

AOT və təhlükəsizlik

AOT-nin əlavə üstünlüyü — əks mühəndisliyin çətinləşdirilməsi. Kompilyasiya edilmiş yerli kodu dekompilyasiya etmək bayt-kodundan daha çətindir. JADX və APKTool kimi vasitələr DEX formatı ilə işləyir, lakin OAT fayllarından eyni detallaşdırma səviyyəsində mənbə kodunu bərpa edə bilmir. Bu, obfuskasiyanı (ProGuard, R8) əvəz etmir, lakin analizatorlar üçün əlavə maneə yaradır.

Hibrid strategiya: profilləşdirilmiş kompilyasiya

Android-də müasir standart — profilləşdirilmiş AOT kompilyasiyası, Android 7.0-dan başlayaraq ART-də tətbiq edilmişdir. Quraşdırma zamanı tətbiq tam kompilyasiya olunmur — bunun əvəzində sürətli bayt-kod yoxlanışı və ilk işəsalmalar üçün JIT istifadə olunur. Bu, Android 5.0–6.0-da təmiz AOT üçün xarakterik olan uzun quraşdırma problemini həll edir.

Tətbiqin 2–3 işəsalınmasından sonra ART profilçisi real istifadə haqqında məlumat toplayır və hansı metodların performans üçün ən kritik olduğunu müəyyənləşdirir. Sonra fon rejimində (adətən gecə, cihaz şarj olarkən) dex2oat bu hot-metodları yerli koda kompilyasiya edir. Fon kompilyasiyasından sonra tətbiq quraşdırma zamanı istifadəçi təcrübəsinə mənfi təsir göstərmədən tam AOT-a ekvivalent performans əldə edir.

kotlin
// Kompilyasiya rejiminin proqram idarəsi (Android 9+)
fun requestProfileCompilation(context: Context) {
    val pm = context.packageManager
    // Profilləşdirilmiş kompilyasiyadan istifadə tövsiyə olunur
    pm.setComponentEnabledSetting(
        ComponentName(context, javaClass()),
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP
    )
}

Hibrid rejim üçün optimallaşdırma

Hibrid kompilyasiyadan maksimum fayda əldə etmək üçün tərtibatçılar bir neçə qaydaya riayət etməlidirlər. Baza profillərindən (baseline profiles) istifadə edin — APK ilə birlikdə verilən əvvəlcədən toplanmış profillər ART-ə quraşdırmadan dərhal sonra hot-metodların AOT kompilyasiyasına başlamağa imkan verir. Baseline profiles tam performansa çatma vaxtını 2–3 işəsalmanan birinci işəsalmaya qədər qısaldır.

Tez-tez verilən suallar

AOT kompilyasiyası sadə sözlərlə nədir?

AOT — proqramın istifadəçi onu işə salmazdan əvvəl maşın koduna tərcümə edilməsidir. Təsəvvür edin ki, kitab siz onu açmazdan əvvəl tamamilə Azərbaycan dilinə tərcümə olunub — siz dərhal, səhifələrin tərcüməsində gecikmələr olmadan oxuyursunuz.

AOT JIT-dən nə ilə fərqlənir?

AOT kodu quraşdırma zamanı kompilyasiya edir (daha uzun quraşdırma, lakin daha sürətli işəsalma). JIT kodu iş zamanı kompilyasiya edir (sürətli quraşdırma, lakin ilk saniyələrdə tətbiq daha yavaş olur). Müasir sistemlər hər iki yanaşmanı birləşdirir.

Niyə Android Dalvik-dən ART AOT-a keçdi?

Google JIT istiləşməsi problemini — tətbiqin işinin ilk saniyələrindəki gecikmələri aradan qaldırmaq istəyirdi. ART-də AOT kompilyasiyası ani işəsalma təmin etdi və enerji sərfiyyatını azaltdı, bu da mobil cihazlar üçün kritik əhəmiyyət daşıyırdı.

AOT tətbiqin ölçüsünə necə təsir edir?

APK ölçüsü dəyişmir — AOT kompilyasiyası sistem bölməsində orijinal DEX-dən 15–30% böyük olan OAT faylları yaradır. İstifadəçi bunu endirilən faylın ölçüsünün artması kimi deyil, daxili yaddaşda boş yerin azalması kimi görür.

Profilləşdirilmiş AOT nədir?

Bu hibrid yanaşmadır, burada tətbiqin ilk işəsalmaları JIT istifadə edir, sonra sistem fonda yalnız tez-tez istifadə olunan metodları yerli koda kompilyasiya edir. Bu, JIT-in sürətli quraşdırmasını AOT-un yüksək performansı ilə birləşdirir.

Nəticə

  • AOT (Ahead-Of-Time) — bayt-kodun proqram işə salınmazdan əvvəl, quraşdırma mərhələsində maşın koduna kompilyasiyası.
  • Android-də AOT dex2oat vasitəsi ilə həyata keçirilir, ELF binar faylları (OAT faylları) yaradır.
  • AOT-nin əsas üstünlükləri: ani işəsalma, sabit performans və aşağı enerji sərfiyyatı.
  • Əsas çatışmazlıqlar: uzun quraşdırma vaxtı və əlavə disk sahəsi 15–30%.
  • AOT təkcə Android-də deyil, həm də Flutter (Dart), .NET (R2R) və Go-da tətbiq olunur.
  • Müasir ART profilləşdirilmiş AOT istifadə edir: ilk işəsalmalar üçün JIT, hot-metodların fon kompilyasiyası.
  • Baseline profiles əsas metodların AOT kompilyasiyasına tətbiqin quraşdırılmasından dərhal sonra başlamağa imkan verir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun