ART: bu nədir, icra mühiti və necə işləyir

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

Android Runtime (ART) — Android 5.0 Lollipop-da Dalvik-i əvəz etmək üçün tətbiq edilmiş Android tətbiq icra mühitidir. Əsas yenilik — JIT-kompilyatorun isinmə problemini aradan qaldıran, tətbiq quraşdırılması zamanı DEX bayt-kodunun birbaşa AOT kompilyasiyası ilə nativ maşın koduna çevrilməsidir. Google, 2024 məlumatına görə, ART Dalvik ilə müqayisədə performansı 20–30% artırır və DEX formatı ilə tam geriyə uyğunluğu qoruyur.

Əsas məqamlar

  • ART — Android 5.0-da Dalvik-i əvəz edən AOT-kompilyasiyalı Android icra mühiti.
  • AOT-kompilyasiya DEX bayt-kodunu tətbiq quraşdırılması zamanı nativ maşın koduna çevirir.
  • JIT+AOT hibrid rejimi (Android 7.0-dan) quraşdırmanı sürətləndirir və yüksək performansı qoruyur.
  • ART-da zibil yığımı təkmilləşdirilib: nəsil əsaslı kollektor sayəsində fasilələr 2–3 ms-ə qədər azaldılıb.
  • ART Dalvik-in DEX bayt-kodu ilə geriyə uyğunluğu qoruyur və Java 8+ xüsusiyyətlərini dəstəkləyir.

ART nədir?

Android Runtime (ART) — DEX bayt-kodunu işə salmadan əvvəl nativ maşın koduna kompilyasiya edən tətbiq icra mühitidir. İş zamanı Just-In-Time kompilyasiyasından istifadə edən Dalvik-dən fərqli olaraq, ART APK quraşdırılması zamanı Ahead-Of-Time (AOT) kompilyasiyasını həyata keçirir. Bu fundamental arxitektura dəyişikliyi tətbiqlərin əhəmiyyətli dərəcədə sürətlənməsinə və enerji sərfiyyatının azalmasına səbəb oldu.

ART ilk dəfə Android 4.4 KitKat-da eksperimental seçim kimi ortaya çıxdı. Tərtibatçılar onu tərtibatçı parametrlərində aktivləşdirib tətbiqlərini test edə bilirdilər. Android 5.0 Lollipop-da ART standart icra mühitinə çevrildi və Dalvik platformadan tamamilə silindi. Android 7.0 Nougat buraxılışına qədər ART hibrid kompilyasiya rejimini əldə etdi.

İnkişaf tarixi

Dalvik-in ART ilə əvəz edilməsi qərarı qəfil deyildi. Yeni mühit üzərində iş 2012-ci ildə Google JIT yanaşmasının məhdudiyyətlərini dərk etdikdə başladı. Əsas məqsədlər: tətbiqlərin işə salınmasını sürətləndirmək, prosessor yükünü azaltmaq və enerji sərfiyyatını azaltmaq. İnkişafa əvvəllər Dalvik optimallaşdırmaları üzərində işləyən Android Runtime Group komandası rəhbərlik edirdi.

Arxitektura dəyişiklikləri

ART Dalvik ilə eyni registr arxitekturasından istifadə edir, lakin tamamilə yenidən işlənmiş kompilyatorla. İnterpretator və JIT-kompilyator əvəzinə ART quraşdırma zamanı DEX fayllarını ELF binar fayllarına çevirən AOT-kompilyator dex2oat daxildir. Nəticədə ART-də tətbiq isinmə fazası olmadan dərhal nativ performansla işə düşür.

ART arxitekturası: Dalvik-dən yeni mühitə

ART Dalvik-in əsas prinsiplərini qoruyub saxladı: ayrı proseslər vasitəsilə tətbiq izolyasiyası, registr arxitekturası və DEX formatı dəstəyi. Lakin daxili tətbiq tamamilə yenidən yazıldı. Dalvik interpretatoru əvəzinə ART üç icra rejimi daxildir: interpretator, JIT-kompilyator və AOT-kompilyator dex2oat. Rejim seçimi tətbiqin həyat dövrü mərhələsindən asılıdır.

ART-ın əsas komponenti dex2oat (dalvik executable to optimized android translator) dir. Bu vasitə tətbiq quraşdırılması zamanı (Android 7.0-dan — həmçinin fon optimallaşdırması zamanı) işə düşür. dex2oat APK-dan DEX fayllarını oxuyur, bayt-kodu optimallaşdırır və nativ kodlu OAT faylı — ELF binarını yaradır. OAT faylları /data/dalvik-cache/ qovluğunda saxlanılır.

bash
# Cihazda OAT fayllarının yoxlanılması
adb shell ls -la /data/dalvik-cache/arm64/

# Tətbiqin məcburi yenidən kompilyasiyası
adb shell cmd package compile -m speed com.example.app

ART komponentləri

ART sistemi bir-biri ilə əlaqəli bir neçə moduldan ibarətdir. dex2oat kompilyatoru nativ kodun yaradılmasına cavabdehdir. Zibil yığan (GC) yaddaşın boşaldılmasını idarə edir. Interpretator nadir çağrılan kodu kompilyasiya olmadan icra edir. Profilləşdirici hibrid kompilyasiya üçün hot-metodları izləyir. Hər modul müstəqil işləyə bilər ki, bu da ART-ı çevik və miqyaslana bilən edir.

Hibrid kompilyasiya: JIT + AOT + profilləşdirmə

Android 7.0 Nougat-dan başlayaraq ART kompilyasiya üçün JIT və AOT üstünlüklərini birləşdirən hibrid yanaşmadan istifadə edir. Tətbiq quraşdırılması zamanı ART artıq tam AOT kompilyasiyasını yerinə yetirmir — bunun əvəzinə tətbiq hot-metodların JIT kompilyasiyası ilə interpretasiya rejimində işə düşür. Bu, quraşdırma vaxtını və tutulan yeri azaldır.

Paralel olaraq fon profilləşdiricisi (background profiler) işləyir. O, icra statistikasını toplayır: hansı metodlar daha tez-tez çağrılır, kodun hansı budaqları icra olunur, hansı siniflər yüklənir. Kifayət qədər məlumat toplandıqdan sonra (adətən 2–3 tətbiq işə salınmasından sonra) ART fonda dex2oat-ı işə salır və yalnız profilləşdirilmiş hot-metodları nativ kodda kompilyasiya edir.

Kompilyasiya rejimləri

ART system_server vasitəsilə idarə olunan bir neçə kompilyasiya rejimini dəstəkləyir. "speed" rejimi bütün metodları AOT-da kompilyasiya edir (maksimum performans, uzun quraşdırma). "speed-profile" rejimi yalnız profilləşdirilmiş hot-metodları kompilyasiya edir (sürət və ölçü balansı). "verify" rejimi yalnız bayt-kodu yoxlayır, kompilyasiya etmir (minimal yer, interpretasiya). Defolt olaraq əksər tətbiqlər üçün optimal olan speed-profile istifadə olunur.

RejimKompilyasiyaQuraşdırma vaxtıPerformans
speedTam AOTUzunMaksimum
speed-profileProfilləşdirilmiş AOTSürətliYüksək
verifyKompilyasiyasızDərhalInterpretasiya
spaceMinimal AOTOrtaOrta

ART profilləşdiricisi

Profilləşdirici icra məlumatlarını xüsusi .prof fayllarında toplayır. Hər tətbiq öz profilini /data/misc/profiles/-də saxlayır. Həddə çatdıqda (adətən 1000 nümunə) profilləşdirici müəyyən edilmiş hot-metodları kompilyasiya etmək üçün dex2oat-ı işə salır. Profillər tətbiq yeniləmələri arasında saxlanılır ki, bu da sistemin OTA yeniləmələrindən sonra təkrar optimallaşdırmanı sürətləndirir.

ART-da zibil yığımı

ART-da zibil yığımı Dalvik ilə müqayisədə köklü şəkildə təkmilləşdirilmişdir. Tək axınlı Concurrent Mark and Sweep (CMS) əvəzinə ART bir neçə optimallaşdırma ilə nəsil əsaslı kollektordan istifadə edir: moving collector (yığının sıxlaşdırılması), large object space (böyük obyektlərin ayrı saxlanması) və concurrent compaction (paralel sıxlaşdırma).

ART-da tipik GC fasiləsi Dalvik-dəki 5–10 ms əvəzinə 2–3 ms təşkil edir. Bu bir neçə mexanizm sayəsində mümkün olmuşdur. Birincisi, ART concurrent fazalar üçün stop-the-world əvəzinə read-barrier istifadə edir. İkincisi, nəsil əsaslı kollektor əksər dövrlərdə bütün yığını deyil, yalnız gənc nəsil obyektlərini emal edir. Üçüncüsü, large object space (LOS) ayrıca ayrılır və adi GC dövrlərində iştirak etmir.

java
// Sazlama üçün GC jurnallarının aktivləşdirilməsi
System.logV("ART", "GC trigger: allocation failed");

// Məcburi GC çağırışı (production-da tövsiyə edilmir)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    Debug.getRuntimeIStats();
}

ART dövründə yaddaş sızmaları

Təkmilləşdirilmiş GC-ə baxmayaraq, yaddaş sızmaları aktual problem olaraq qalır. ART-ə xas səbəb — JNI vasitəsilə nativ kitabxanaların düzgün boşaldılmadan yüklənməsidir. Əgər nativ kod malloc vasitəsilə yaddaş ayırırsa, lakin free çağırmırsa, ART bu yaddaşı boşalda bilməz — o, idarə olunan yığından kənardadır. Android NDK-dəki AddressSanitizer aləti belə sızmaları aşkar etməyə kömək edir.

ART vs Dalvik: müqayisəli analiz

ART və Dalvik eyni vəzifənin — Android tətbiqlərinin icrasının — iki prinsipial fərqli tətbiqidir. Fərqlər bütün səviyyələrə: kompilyasiyadan yaddaş idarəçiliyinə qədər təsir edir. Aşağıda əsas performans və uyğunluq parametrləri üzrə müqayisə verilmişdir.

ART-ın əsas üstünlüyü — JIT isinməsinin aradan qaldırılmasıdır. Dalvik-də tətbiq JIT hot-metodları kompilyasiya edərkən ilk 3–10 saniyə ərzində ləngiyə bilərdi. ART-da bütün metodlar artıq nativ koda kompilyasiya edilmişdir (və ya fonda kompilyasiya ediləcək). Bu, xüsusilə oyunlarda və ağır UI olan tətbiqlərdə nəzərə çarpır: fps fərqi ART-ın xeyrinə 15–20% təşkil edə bilər.

ParametrDalvikART
KompilyasiyaJIT (iş zamanı)AOT + hibrid (quraşdırmada)
İşə salınma vaxtı3–10 san (isinmə)Dərhal
APK ölçüsü~6–7 MB (DEX)+20% (OAT)
GC fasilələri5–10 ms2–3 ms
Enerji sərfiyyatıYüksək (JIT CPU yükləyir)Aşağı (nativ kod)

Uyğunluq

Dalvik üçün yazılmış bütün tətbiqlər ART-da dəyişiklik olmadan işləyir. Google DEX bayt-kodu səviyyəsində tam geriyə uyğunluğa zəmanət verir. İstisna — refleksiya vasitəsilə Dalvik-specific internal API istifadə edən kod: Android SDK-da @hide ilə işarələnmiş dalvik.system.DexFile sinif üzvləri. Belə kod ictimai API-lərdən istifadə etmək üçün yenilənməlidir.

Java 8 dəstəyi və desuqarlaşdırma

ART Java 8 xüsusiyyətlərini nativ dəstəkləyən ilk Android icra mühiti oldu. Android 7.0-dan başlayaraq ART desuqarlaşdırmanı — Java 8 konstruksiyalarının (lambdalar, method references, Stream API) ekvivalent Java 7 koduna çevrilməsi prosesini ehtiva edir. Bu, köhnə cihazlarla uyğunluğu itirmədən müasir sintaksisdən istifadə etməyə imkan verir.

Desuqarlaşdırma D8 kompilyatoru tərəfindən yerinə yetirilir və aşağıdakı kimi işləyir. Lambda olan mənbə kodu eyni sinif daxilində sintetik metoda çevrilir, lambda isə invoke-custom çağırışı ilə əvəz olunur. ART mühiti xüsusi olaraq Java 8 üçün əlavə edilmiş invoke-custom təlimatını dəstəkləyir. Android 6.0 və daha aşağı cihazlarda lambdalar anonim siniflərə desuqarlaşdırılır.

java
// Java 8 lambda — ART-da desuqarlaşdırma
button.setOnClickListener(v -> handleClick(v));

// Desuqarlaşdırmadan sonra (Java 7-də ekvivalent)
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleClick(v);
    }
});

Desuqarlaşdırmanın məhdudiyyətləri

Bütün Java 8 xüsusiyyətləri desuqarlaşdırma tərəfindən dəstəklənmir. java.time API (tarix və vaxt) yalnız build.gradle-ə əlavə edilən desugar_jdk_libs kitabxanası vasitəsilə əlçatandır. Stream API də desugar_jdk_libs tələb edir. java.util.functionOptional əlavə asılılıqlar olmadan işləyir. Java 8-in tam dəstəyi Android 8.0 və daha yuxarı cihazlarda desuqarlaşdırma olmadan əlçatandır.

ART üçün tətbiq optimallaşdırması

ART geriyə uyğun olsa da, bəzi optimallaşdırma təcrübələri performansı məhz bu mühitdə yaxşılaşdırır. Əsas tövsiyə — refleksiyanı minimuma endirməkdir. ART kompilyasiya mərhələsində görünən metodları birbaşa maşın kodu çağırışına kompilyasiya edir. Refleksiya ART-ı əlavə stub-lar yaratmağa məcbur edir ki, bu da icranı 10–15% yavaşladır.

Android 9.0-dan başlayaraq ART-də App Startup Optimization dəstəyi ortaya çıxdı. Tərtibatçı manifestdə <initialization> vasitəsilə başlatma siniflərini qeyd edə bilər və ART onları tətbiq işə düşəndə əvvəlcədən yükləyəcək. Bu, çox sayda plagin və ya kitabxanası olan tətbiqlər üçün işə salınma vaxtını 5–15% azaldır.

xml
<!-- App Startup Optimization AndroidManifest.xml-də -->
<application>
    <profileable
        android:shell="true"
        android:enable="true" />
</application>

Performansın yoxlanılması

ART-da performansı ölçmək üçün systrace və perfetto istifadə edin. Systrace dex2oat kompilyasiya vaxtını, GC tezliyini və kadr çəkmə sürətini göstərir. Perfetto daha ətraflı məlumat verir: axın paylanması, JNI keçid vaxtı, nativ kitabxanaların yüklənməsi. İşə salma: adb shell perfetto -o /data/misc/perfetto-traces/trace.perfetto -t 10s sched freq idle am wm.

Tez-tez verilən suallar

Android-də ART nədir?

ART (Android Runtime) — tətbiq kodunu quraşdırma zamanı maşın koduna kompilyasiya edən Android tətbiq icra mühitidir. Bu, köhnə Dalvik mühiti ilə müqayisədə tətbiqlərin işə salınmasını və işini sürətləndirir.

ART Dalvik-dən nə ilə fərqlənir?

ART kodu tətbiq quraşdırılması zamanı əvvəlcədən (AOT) kompilyasiya edir, Dalvik isə onu iş zamanı hissə-hissə (JIT) kompilyasiya edirdi. Buna görə ART-də tətbiqlər daha sürətli işə düşür və daha az enerji sərf edir.

Tətbiqin ART-da işlədiyini necə yoxlamaq olar?

adb shell getprop yerinə yetirin və persist.sys.dalvik.vm.lib.2 xassəsini tapın. "libart.so" dəyəri ART, "libdvm.so" — Dalvik deməkdir. Android 5.0+ olan bütün cihazlarda icra mühiti ART-dir.

ART APK ölçüsünə təsir edirmi?

Az miqdarda. Tətbiqin özü APK formatında DEX faylları ilə qalır. ART /data/dalvik-cache/-də əlavə OAT faylı yaradır ki, bu da orijinal DEX-dən 10–20% çox yer tutur, lakin bu saxlama APK ölçüsünə daxil deyil.

ART Java 8-i dəstəkləyirmi?

Bəli, ART desuqarlaşdırma mexanizmi vasitəsilə Java 8 xüsusiyyətlərinin əksəriyyətini dəstəkləyir. Lambdalar, method references və funksional interfeyslər Android 5.0+ olan bütün cihazlarda işləyir. Stream API və java.time üçün desugar_jdk_libs kitabxanası tələb olunur.

Nəticə

  • ART — Android 5.0 Lollipop-da Dalvik-i kompilyasiyaya prinsipial fərqli yanaşma ilə əvəz edən Android icra mühiti.
  • AOT-kompilyasiya dex2oat DEX bayt-kodunu tətbiq quraşdırılması zamanı nativ ELF binarına çevirir.
  • JIT + AOT hibrid rejimi (Android 7.0+) quraşdırmanı sürətləndirir və real istifadəyə uyğunlaşır.
  • ART-ın nəsil əsaslı zibil kollektor GC fasilələrini 5–10 ms-dən 2–3 ms-ə endirdi.
  • Profilləşdirici 2–3 işə salınmadan məlumat toplayır və hot-metodların fon kompilyasiyasını işə salır.
  • Java 8 desuqarlaşdırması Android 5.0+ cihazlarda lambda və Stream API istifadəsinə imkan verir.
  • ART-da optimal performans üçün refleksiyanı minimuma endirin və App Startup Optimization istifadə edin.

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