يتضمّن وقت تشغيل Android (ART) برنامج ترجمة في الوقت الفعلي (JIT) مع تحديد خصائص الرمز البرمجي الذي يحسّن أداء تطبيقات Android باستمرار أثناء تشغيلها. تكمّل أداة التجميع أثناء التنفيذ أداة التجميع الحالية مسبقًا (AOT) في ART، كما أنّها تحسّن الأداء أثناء التشغيل وتوفّر مساحة التخزين وتسرّع عمليات تحديث التطبيقات والنظام. ويعمل أيضًا على تحسين برنامج الترجمة البرمجية AOT من خلال تجنُّب تباطؤ النظام أثناء التحديثات التلقائية للتطبيقات أو إعادة ترجمة التطبيقات أثناء التحديثات عبر شبكة غير سلكية (OTA).
على الرغم من أنّ التجميع أثناء التنفيذ (JIT) والتجميع مسبقًا (AOT) يستخدمان المجمّع نفسه مع مجموعة مشابهة من عمليات التحسين، قد لا يكون الرمز البرمجي الذي يتم إنشاؤه متطابقًا. تستفيد عملية JIT من معلومات نوع وقت التشغيل، ويمكنها إجراء عملية تضمين أفضل، وتتيح إمكانية تجميع عملية استبدال أثناء التنفيذ (OSR)، وكل ذلك يؤدي إلى إنشاء رمز مختلف قليلاً.
بنية JIT

تجميع أثناء التنفيذ
يتضمّن التجميع أثناء التنفيذ الأنشطة التالية:

- يشغّل المستخدم التطبيق، ما يؤدي إلى تشغيل ART لتحميل الملف
.dex
.- إذا كان ملف
.oat
(ثنائي AOT لملف.dex
) متاحًا، يستخدمه ART مباشرةً. على الرغم من أنّه يتم إنشاء ملفات.oat
بانتظام، إلا أنّها لا تحتوي دائمًا على رمز برمجي مترجَم (ثنائي AOT). - إذا كان ملف
.oat
لا يحتوي على رمز مجمَّع، سيتم تشغيل ART من خلال الترجمة الفورية والمفسّر لتنفيذ ملف.dex
.
- إذا كان ملف
- يتم تفعيل التجميع أثناء التنفيذ لأي تطبيق لم يتم تجميعه وفقًا لفلتر التجميع
speed
(الذي ينص على "تجميع أكبر قدر ممكن من التطبيق"). - يتم تفريغ بيانات ملف JIT إلى ملف في دليل نظام لا يمكن للتطبيق الوصول إليه إلا.
- يحلّل برنامج AOT (
dex2oat
) الخفي هذا الملف لتنفيذ عملية الترجمة.
الشكل 3. أنشطة البرنامج الخفي للتجميع أثناء التنفيذ
خدمة Google Play هي مثال تستخدمه التطبيقات الأخرى التي تتصرف بشكل مشابه للمكتبات المشتركة.
سير عمل JIT

- يتم تخزين معلومات تحديد الملف الشخصي في ذاكرة التخزين المؤقت للرموز وتخضع لعملية جمع البيانات غير الضرورية عند الضغط على الذاكرة.
- لا يمكن ضمان أنّ اللقطة التي تم التقاطها عندما كان التطبيق يعمل في الخلفية ستتضمّن بيانات كاملة (أي كل ما تم تجميعها في الوقت المناسب).
- لا تتم محاولة تسجيل كل شيء (لأنّ ذلك قد يؤثر في أداء وقت التشغيل).
- يمكن أن تكون الطرق في ثلاث حالات مختلفة:
- مفسَّر (رمز dex)
- تم تجميعها أثناء التنفيذ
- تم تجميعها مسبقًا
- يعتمد مقدار الذاكرة المطلوب لتشغيل JIT بدون التأثير في أداء التطبيق الذي يعمل في المقدّمة على التطبيق المعنيّ. تتطلّب التطبيقات الكبيرة ذاكرة أكبر من التطبيقات الصغيرة. بشكل عام، تستقر التطبيقات الكبيرة عند حوالي 4 ميغابايت.
تفعيل تسجيل الأخطاء في الوقت الفعلي
لتفعيل تسجيل JIT، شغِّل الأوامر التالية:
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start
إيقاف التجميع أثناء التنفيذ
لإيقاف JIT، نفِّذ الأوامر التالية:
adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start
فرض التجميع
لفرض التجميع، نفِّذ ما يلي:
adb shell cmd package compile
حالات الاستخدام الشائعة لفرض تجميع حزمة معيّنة:
- استنادًا إلى الملف الشخصي:
adb shell cmd package compile -m speed-profile -f my-package
- كاملة:
adb shell cmd package compile -m speed -f my-package
حالات الاستخدام الشائعة لفرض تجميع كل الحِزم:
- استنادًا إلى الملف الشخصي:
adb shell cmd package compile -m speed-profile -f -a
- كاملة:
adb shell cmd package compile -m speed -f -a
محو بيانات الملف الشخصي
على الإصدار 13 من نظام التشغيل Android أو الإصدارات الأقدم
لمحو بيانات الملف الشخصي المحفوظة على الجهاز وإزالة الرمز البرمجي المجمَّع، نفِّذ ما يلي:
adb shell pm compile --reset
على الإصدار 14 من نظام التشغيل Android أو الإصدارات الأحدث
لمحو بيانات الملف الشخصي المحفوظة على الجهاز فقط، اتّبِع الخطوات التالية:
adb shell pm art clear-app-profiles
ملاحظة: بخلاف الأمر الخاص بنظام التشغيل Android 13 أو الإصدارات الأقدم، لا يمحو هذا الأمر بيانات الملف الشخصي الخارجي (`.dm`) التي يتم تثبيتها مع التطبيق.
لمحو بيانات الملف الشخصي المحلّي وإزالة الرمز البرمجي المجمَّع الذي تم إنشاؤه من بيانات الملف الشخصي المحلّي (أي لإعادة الضبط إلى حالة التثبيت)، نفِّذ ما يلي:
adb shell pm compile --reset
ملاحظة: لا يزيل هذا الأمر الرمز البرمجي الذي تم تجميعه من بيانات الملف الشخصي الخارجي (.dm) المثبَّتة مع التطبيق.
لمحو كل التعليمات البرمجية التي تم تجميعها، نفِّذ الأمر التالي:
adb shell cmd package compile -m verify -f
ملاحظة: يحتفظ هذا الأمر ببيانات الملف الشخصي المحلي.