Mobil ishlab chiqishda Runtime: bu nima, runtime tizimi va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-05-17 O'qish vaqti: 9 daq

Runtime — mobil ilovaning kod bajarilishini boshqaradigan dasturiy qatlamdir: xotira ajratadi, istisnolarni qayta ishlaydi, garbage collection ishga tushiradi va metod chaqiruvlarini taqsimlaydi. Runtime bo'lmasa, hech qanday ilova ishlay olmaydi — bu kompilyatsiya qilingan kod bilan operatsion tizim o'rtasidagi oraliq qatlamdir. Android Developer Documentation, 2025 ma'lumotlariga ko'ra, bajarish muhiti platformaning ishlashi va mosligini belgilaydigan asosiy elementdir.

Asosiy fikrlar

  • Runtime — mobil ilovaning bayt-kodini yoki mashina kodini bajaradigan dasturiy muhitdir.
  • ART (Android Runtime) AOT-kompilyatsiyadan foydalanadi va Android 5.0 dan boshlab Dalvik o'rnini egalladi.
  • Objective-C Runtime iOS-da metodlarning dinamik taqsimlanishi va message passing ni ta'minlaydi.
  • JIT-kompilyatsiya bayt-kodni to'g'ridan-to'g'ri ilovaning bajarilishi vaqtida mashina kodiga kompilyatsiya qiladi.
  • ARM64 Runtime — 64 bitli ARM protsessorlari uchun optimallashtirilgan kod bajariladigan apparat darajasidir.

Mobil ishlab chiqishda Runtime nima?

Runtime (bajarish muhiti) — dastur ishga tushirilgandan so'ng uning bajarilishini ta'minlaydigan infratuzilmadir. Mobil ishlab chiqish kontekstida runtime sinf yuklovchini, xotira ajratuvchini, garbage collector, metod taqsimlovchisi va istisno ishlovchisini o'z ichiga oladi. Bu oraliq qatlam bo'lmasa, operatsion tizim Dalvik bayt-kodini yoki Objective-C xabarlarini bajara olmaydi.

Mobil platformalar runtime-ning turli amalga oshirilishlaridan foydalanadi. Android gibrid AOT/JIT-kompilyatsiya bilan ART (Android Runtime) dan foydalanadi. iOS message passing va SEL-identifikatorlariga asoslangan Objective-C Runtime — dinamik tizimdan foydalanadi. Ikkala yondashuv ham bitta vazifani hal qiladi: dasturchi kodini aniq qurilmada maksimal unumdorlik bilan bajarish.

Google I/O 2024 ma'lumotlariga ko'ra, Android Runtime dunyo bo'ylab qurilmalarda kuniga 10 milliarddan ortiq metodni qayta ishlaydi. Runtime unumdorligi bevosita ilovaning ishga tushish tezligiga, animatsiyalarning silliqligiga va batareya sarfiga ta'sir qiladi. Har bir metod chaqiruvi, har bir xotira ajratish va har bir garbage collection sikli runtime qatlamidan o'tadi.

Runtime tizimi: qanday komponentlardan iborat

Runtime tizimi beshta asosiy komponentni o'z ichiga oladi: sinf yuklovchi, xotira menejeri, interpretator yoki kompilyator, metod taqsimlovchisi va xavfsizlik tizimi. Har bir komponent kod bajarilishi jarayonida qat'iy belgilangan funktsiyani bajaradi.

Sinf yuklovchi va tekshirish

Foydalanuvchi ilovani ishga tushirganda, ClassLoader DEX-fayllarni (Android) yoki Mach-O ikkilik fayllarni (iOS) operativ xotiraga yuklaydi. Android-da bu bosqich bayt-kodni tekshirishni o'z ichiga oladi: runtime kod xavfli ko'rsatmalarni o'z ichiga olmasligini, massiv chegaralaridan chiqmasligini va turlarga rioya qilishini tekshiradi. Tekshirish zararli kod bajarilishining oldini oladigan muhim xavfsizlik bosqichidir.

Xotira menejeri va Garbage Collector

Memory Manager ob'ektlar uchun xotirani ajratadi va bo'shatadi. Android ART-da avlodli yig'ish bilan concurrent garbage collector ishlatiladi: yosh ob'ektlar tez-tez, keksalar kamroq tekshiriladi. Objective-C Runtime Automatic Reference Counting (ARC) ni qo'llaydi, bunda kompilyator retain/release chaqiruvlarini avtomatik kiritadi.

Metod taqsimlovchisi va virtual jadval

Method dispatcher qaysi metod amalga oshirilishi chaqirilishini aniqlaydi. Statik tillarda (Kotlin, Swift) taqsimlash vtable — virtual metodlar jadvali orqali amalga oshiriladi. Dinamik tillarda (Objective-C) xabar amalga oshirishni sinfda va uning super-sinflarida qidiradigan objc_msgSend orqali o'tadi. Natija takroriy chaqiruvlarni tezlashtirish uchun method cache da saqlanadi.

Android-da ART qanday ishlaydi

Android Runtime (ART) — Android ilovalarining DEX-bayt-kodini bajaradigan virtual mashinadir. ART Android 5.0 Lollipop da Dalvik o'rnini egallab, AOT-kompilyatsiyani taklif qildi: ilova o'rnatish vaqtida bir marta mashina kodiga kompilyatsiya qilinadi. Bu har bir ishga tushirishda JIT-kompilyatsiya qo'shimcha xarajatlarini bartaraf etdi.

Android 7.0 Nougat dan boshlab ART gibrid yondashuvdan foydalanadi. O'rnatish vaqtida faqat tez-tez ishlatiladigan metodlar (hot methods) uchun JIT-kompilyatsiya bajariladi, qolgan kod interpretatsiya qilinadi. Fon jarayoni (profile-guided optimization) qaysi metodlar ko'proq chaqirilishini tahlil qiladi va ularni qurilma bo'sh vaqtida AOT kompilyatsiya qiladi. Bu o'rnatish vaqtini qisqartiradi va shu bilan birga yuqori unumdorlikni ta'minlaydi.

ART shuningdek DEX-fayllarni ARM64 mashina kodli ELF-ikkilik fayllarga aylantiruvchi AOT compiler (dex2oat) ni o'z ichiga oladi. Kompilyatsiya uchta optimallashtirish darajasi bilan amalga oshiriladi: quicken (tezkor), optimize (o'rta) va everything (to'liq). Android odatda kompilyatsiya tezligi va kod unumdorligi o'rtasida muvozanatni ta'minlaydigan optimize ni qo'llaydi.

kotlin
class RuntimeExample {
    fun measureExecutionTime() {
        val start = System.nanoTime()
        // ART kompilyatsiya qiladigan metodning chaqiruvi
        processData()
        val end = System.nanoTime()
        println("Bajarish vaqti: ${end - start} ns")
    }
}

Yuqoridagi misolda System.nanoTime() chaqiruvi ART runtime orqali Linux yadrosiga taqsimlanadigan mahalliy metoddir. ART Kotlin bayt-kodini qurilma protsessori bajaradigan ARM64-ko'rsatmalariga aylantiradi. Bu jarayon dasturchi uchun sezilmas tarzda sodir bo'ladi, ammo uni optimallashtirish Android Platform jamoasining asosiy vazifasidir.

Profile-Guided Optimization (PGO)

Profilga asoslangan optimallashtirish metodlardan foydalanish profillarini to'playdigan ART mexanizmidir. profiles/.primary.prof fayli AOT kompilyatsiya qilinadigan hot-metodlar ro'yxatini o'z ichiga oladi. Android Performance Team ma'lumotlariga ko'ra, PGO profil to'plangandan so'ng bir necha kun foydalanishdan keyin ilovaning ishga tushishini 15–30% tezlashtiradi.

Dasturchi Gradle loyihasida baseline profiles ni yoqishi mumkin. Bular ART ga o'rnatishdan so'ng darhol qaysi metodlarni AOT kompilyatsiya qilishni ko'rsatadigan qo'lda yozilgan annotatsiyalardir. Baseline profiles fon profillashtirishni kutmasdan birinchi ishga tushishni 40% qisqartiradi.

iOS-da Objective-C Runtime qanday ishlaydi

Objective-C Runtime — iOS va macOS da Objective-C kodining bajarilishini ta'minlaydigan dinamik kutubxonadir. Uning yadrosi message passing ni amalga oshiradigan objc_msgSend funktsiyasidir: to'g'ridan-to'g'ri metod chaqiruvi o'rniga ob'ekt selektorli xabar yuboradi, runtime esa qaysi amalga oshirish bajarilishini aniqlaydi.

Har bir Objective-C ob'ekti sinfga isa ko'rsatgichini o'z ichiga oladi, sinf esa selektorlarni (SEL) amalga oshirishlar bilan (IMP) bog'laydigan dispatch table (taqsimlash jadvali) ga ega. Metod chaqirilganda, objc_msgSend zanjir bo'ylab harakat qiladi: sinf → super-sinf → NSObject, IMP topilmaguncha. Agar amalga oshirish topilmasa, runtime xabarni tutib olishi yoki istisno yaratishi mumkin bo'lgan forwarding mechanism ni ishga tushiradi.

Objective-C Runtime shuningdek bajarilish vaqtida mavjud selektorning IMP sini almashtiradigan method swizzling ni qo'llab-quvvatlaydi. Bu AOP kutubxonalarida va monitoring vositalarida ishlatiladigan kuchli mexanizm, ammo butun ilovaga ta'siri tufayli ehtiyotkorlik talab qiladi.

objective-c
@interface RuntimeDemo : NSObject
- (void)printClassInfo;
@end

@implementation RuntimeDemo
- (void)printClassInfo {
    // objc_getClass — runtime funktsiyasi
    Class cls = objc_getClass("RuntimeDemo");
    unsigned int count;
    Method *methods = class_copyMethodList(cls, &count);
    NSLog("Metodlar soni: %d", count);
}
@end

Kod Objective-C Runtime API ga to'g'ridan-to'g'ri murojaatni namoyish etadi: objc_getClass sinf ob'ektini nomi bo'yicha oladi, class_copyMethodList barcha metodlar ro'yxatini chiqaradi. Bu amaldagi reflection — bajarilish vaqtida sinf metama'lumotlariga kirish. Bunday yondashuv XCTest da testlarni dinamik ro'yxatga olish uchun ishlatiladi.

isa ko'rsatgichi va tagged pointers

isa pointer — har bir ob'ektning dastlabki 8 baytida saqlanadigan ob'ekt sinfiga ko'rsatgich. iOS 12 dan boshlab Apple optimallashtirish uchun isa-swizzling ni joriy etdi: isa ning kichik bitlari ob'ekt holati haqida qo'shimcha ma'lumotni kodlaydi. Tagged pointers — 60 bitgacha bo'lgan qiymatlar (NSNumber, NSDate) heap da ob'ekt ajratmasdan to'g'ridan-to'g'ri ko'rsatgichda saqlanadigan yana bir optimallashtirishdir. Bu xotira menejeriga yukni 30% kamaytiradi.

JIT va AOT-kompilyatsiya: yondashuvlarni taqqoslash

JIT (Just-In-Time) va AOT (Ahead-Of-Time) bayt-kodni mashina kodiga kompilyatsiya qilishning ikkita yondashuvidir. JIT kodni ilovaning bajarilishi vaqtida kompilyatsiya qiladi, issiq qismlarni tahlil qiladi va ularni joyida optimallashtiradi. AOT butun kodni oldindan — ilovani o'rnatishda yoki dasturchi tomonida kompilyatsiya qiladi.

XarakteristikaJITAOT
Kompilyatsiya vaqtiBajarilish vaqtidaO'rnatish / build paytida
APK/IPA hajmiKichikroq (faqat bayt-kod)Kattaroq (mashina kodi)
Ishga tushish tezligiPastroq (kompilyatsiya kerak)Yuqoriroq (kod bajarishga tayyor)
Qurilmaga mos optimallashtirishHa (adaptiv)Cheklangan (generic)
RAM sarfiYuqoriroq (xotirada kompilyator)Pastroq

ART ning gibrid yondashuvi (Android 7+) optimal hisoblanadi: ilova kam chaqiriladigan metodlar uchun interpretatordan, hot-metodlar uchun JIT dan va profile-guided optimization dan olingan metodlar uchun AOT dan foydalanadi. iOS esa, aksincha, LLVM orqali qat'iy AOT dan foydalanadi: Swift va Objective-C Xcode da build bosqichida mashina kodiga kompilyatsiya qilinadi.

Apple Developer Documentation, 2024 ma'lumotlariga ko'ra, Swift runtime ilova hajmiga taxminan 15 MB qo'shadi. Flutter o'z Dart VM dan foydalanadi, bunda JIT-kompilyatsiya hot reload uchun debug-rejimda, AOT esa maksimal unumdorlik uchun release-rejimda ishlaydi. React Native ishga tushish vaqtini 50% qisqartiradigan AOT-kompilyatsiyali Hermes JavaScript dvigatelidan foydalanadi.

ARM64 Runtime va mashina kodi

ARM64 Runtime — mashina kodi qurilma protsessori bilan o'zaro ta'sir qiladigan darajadir. Zamonaviy mobil qurilmalarning aksariyati ARM64 (aarch64) protsessorlarida ishlaydi. Runtime bayt-kodni yoki mahalliy chaqiruvlarni CPU bajaradigan ARM64-ko'rsatmalariga tarjima qiladi.

Runtime ishlatadigan asosiy ARM64 registrlari: x0–x7 (funksiya parametrlari), x8 (bilvosita natija), x30 (qaytish manzili), sp (stack pointer), fp (frame pointer). ART ARM64 Procedure Call Standard ga rioya qiladigan kod yaratadi: barcha metod chaqiruvlari protsessor arxitekturasi belgilagan protokol orqali o'tadi.

ARM64 ABI ni tushunish unumdorlikni optimallashtirishda muhim: inline-keshlash, tarmoqlanishni bashorat qilish va kodni xotirada tekislash bevosita runtime ish tezligiga ta'sir qiladi. Profillashtirish vositalari (Android Studio Profiler, Instruments) kodning qaysi qismlari runtime da ko'proq vaqt o'tkazishini ko'rsatadi — aynan ularni optimallashtirish eng katta o'sishni beradi.

cpp
// ART tomonidan yaratiladigan ARM64 assembly misoli
// Ikki parametrli metodning chaqiruvi

mov    x0, x23            // self (this)
mov    x1, x24            // param1
mov    x2, x25            // param2
bl     methodEntryPoint   // runtime orqali chaqiruv
str    x0, [sp, #8]      // natijani saqlash

Bu misolda ARM64 ko'rsatmalari mov argumentlarni x0–x2 registrlariga uzatadi, bl metodning kirish nuqtasini chaqiradi, str esa qaytgan qiymatni saqlaydi. Runtime har bir metod chaqiruvi uchun bunday ko'rsatmalarni yaratadi, ketma-ketlikni devirtualization va inlining orqali optimallashtiradi.

Runtime ning unumdorlikka ta'siri

Runtime overhead — dinamik taqsimlashning muqarrar xarajatidir. Runtime orqali har bir metod chaqiruvi talab qiladi: dispatch table da amalga oshirishni qidirish, turlarni tekshirish, IMP ni chaqirish va natijani qaytarish. O'lchovlar runtime Objective-C da chaqiruvga 10–50 ns, ART da esa 5–20 ns qo'shishini ko'rsatadi.

Xarajatni kamaytirish uchun dasturchilar monomorphic inlining (ART) va method caching (Objective-C) dan foydalanadilar. Kotlin/Native va Swift to'g'ridan-to'g'ri ARM64 ga kompilyatsiya qilinadi, runtime oraliq qatlamini butunlay yo'q qiladi, ammo dinamik imkoniyatlarni — reflection, swizzling, sinflarni dinamik yuklashni yo'qotadi.

Tez-tez so'raladigan savollar

Runtime SDK dan qanday farq qiladi?

SDK (Software Development Kit) — ilovani ishlab chiqish uchun vositalar to'plami (kompilyator, kutubxonalar, utilitalar). Runtime — allaqachon ishlab chiqilgan ilova qurilmada bajariladigan muhitdir. SDK dasturchiga kerak, runtime — foydalanuvchiga.

Mobil ilovada Runtime ni almashtirish mumkinmi?

Yo'q — runtime operatsion tizimning bir qismidir va foydalanuvchi tomonidan almashtirib bo'lmaydi. ART Android Framework ga, Objective-C Runtime esa iOS ga o'rnatilgan. Dasturchi tilni tanlashi mumkin (runtime siz Kotlin/Native) yoki Flutter da Dart VM kabi virtual mashinalardan foydalanishi mumkin.

Runtime batareya sarfiga ta'sir qiladimi?

Ha, runtime energiya sarfiga ta'sir qiladi. ART dagi Garbage collection va Swift runtime CPU dan foydalanadi, bu zaryad sarfini oshiradi. concurrent GC va iOS dagi tagged pointers kabi optimallashtirishlar runtime ning batareyaga ta'sirini 20–30% kamaytiradi.

Runtime error nima va uni qanday ushlash mumkin?

Runtime error — bajarilish vaqtida yuzaga keladigan xato: null pointer exception, index out of bounds, nolga bo'lish. Compile-time xatolardan farqli o'laroq, ular build paytida aniqlanmaydi. Ular try-catch bloklari yoki crash reporting (Firebase Crashlytics, Sentry) orqali ushlanadi.

Swift runtime Objective-C Runtime dan qanday farq qiladi?

Swift runtime Objective-C dan yengilroq: odatda dynamic dispatch ni qo'llab-quvvatlamaydi, heap da ajratmasdan value types (struct) ishlatadi va message forwarding ga ega emas. Swift metodlari @objc dynamic bilan belgilanmasa, to'g'ridan-to'g'ri vtable orqali chaqiriladi. Bu benchmarklarda 5x gacha tezlik oshishini beradi.

Xulosalar

  • Runtime — xotirani, metodlarni va kod xavfsizligini boshqaradigan bajarish muhitidir.
  • ART (Android) optimal unumdorlik uchun profile-guided optimization bilan JIT/AOT gibrididan foydalanadi.
  • Objective-C Runtime objc_msgSend va dispatch table orqali message passing asosida qurilgan.
  • JIT kodni joyida kompilyatsiya qiladi va qurilmaga moslashadi, AOT tez ishga tushish uchun oldindan kompilyatsiya qiladi.
  • ARM64 Runtime — zamonaviy protsessorlarda mashina kodini bajaradigan apparat qatlamidir.
  • Runtime overhead metod chaqiruviga 5–50 ns ni tashkil qiladi va inlining va keshlash orqali minimallashtiriladi.
  • Runtime ni tushunish unumdorlikni optimallashtirish, nosozliklarni tuzatish va ilova arxitekturasini tanlash uchun zarurdir.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing