يتضمّن "مُشغِّل Android" (ART) مُجمِّعًا للترجمة أثناء التشغيل (JIT) مع ميزة تحليل رموز البرامج التي تحسِّن باستمرار أداء تطبيقات Android أثناء تشغيلها. يكمل مُجمِّع JIT مُجمِّع AOT الحالي في ART ويُحسِّن أداء وقت التشغيل ويوفّر مساحة تخزين ويُسري عمليات تحديث التطبيقات والنظام. ويُحسِّن هذا الإصدار أيضًا من أداة التحويل المسبق إلى رموز ثابتة (AOT) من خلال تجنُّب تباطؤ النظام أثناء تحديثات التطبيقات التلقائية أو إعادة تجميع التطبيقات أثناء التحديثات عبر شبكة غير سلكية (OTA).
على الرغم من أنّ ميزة التجميع أثناء التنفيذ وميزة AOT تستخدمان المُجمِّع نفسه مع مجموعة مماثلة من التحسينات، قد لا يكون الرمز الذي تم إنشاؤه متطابقًا. يستفيد JIT من المعلومات من نوع بيئة التشغيل، ويمكنه تنفيذ عملية تضمين أفضل، ويجعل تجميع استبدال التكديس (OSR) ممكنًا، وكل ذلك ينتج عنه تعليمات برمجية مختلفة قليلاً.
بنية التجميع أثناء التشغيل (JIT)
تجميع JIT
يتضمن التجميع في JIT الأنشطة التالية:
- يشغّل المستخدم التطبيق، ما يؤدي إلى تشغيل ART لتحميل ملف
.dex
.- إذا كان ملف
.oat
(الملف الثنائي AOT لملف.dex
) متاحًا، يستخدمه ART مباشرةً. على الرغم من أنّه يتم إنشاء ملفات.oat
بانتظام، إلا أنّها لا تحتوي دائمًا على رمز مُجمَّع (ملف ثنائي AOT). - إذا كان ملف
.oat
لا يحتوي على رمز مجمّع، سيتم تنفيذ الأمر ART من خلال JIT والمترجم لتنفيذ ملف.dex
.
- إذا كان ملف
- يتم تفعيل ميزة "التجميع أثناء التنفيذ" لأي تطبيق لم يتم تجميعه وفقًا لفلترة التجميع
speed
(التي تشير إلى "تجميع أكبر قدر ممكن من التطبيق"). - يتم تفريغ بيانات الملف الشخصي لميزة "الترجمة الفورية" في ملف في دليل النظام الذي يمكن للتطبيق فقط الوصول إليه.
- ويحلّل البرنامج الخفي لعملية التجميع AOT (
dex2oat
) هذا الملف لتشغيل عملية التجميع.
الشكل 3. أنشطة البرنامج الخفي في JIT.
خدمة Google Play هي مثال على التطبيقات الأخرى التي تتصرف بطريقة مشابهة للمكتبات المشتركة.
سير عمل JIT
- يتم تخزين معلومات التحليل في ذاكرة التخزين المؤقت للرمز وتخضع لجمع المهملات في حال الضغط على الذاكرة.
- وليس هناك ما يضمن احتواء اللقطة التي يتم التقاطها عندما كان التطبيق في الخلفية على بيانات كاملة (أي جميع البيانات التي تم جمعها باستخدام JIT).
- وليست هناك محاولة لضمان تسجيل كل البيانات (لأن ذلك قد يؤثر في أداء بيئة التشغيل).
- يمكن أن تكون الطرق في ثلاث حالات مختلفة:
- مفسَّرة (رمز dex)
- تم تجميعه أثناء التنفيذ
- تم تجميعه باستخدام تقنية AOT
- تعتمد متطلبات الذاكرة لتشغيل JIT بدون التأثير في أداء التطبيقات التي تعمل في المقدّمة على التطبيق المعني. تتطلّب التطبيقات الكبيرة مزيدًا من الذاكرة مقارنةً بالتطبيقات الصغيرة. بشكل عام، يصل حجم التطبيقات الكبيرة إلى 4 ميغابايت تقريبًا.
تفعيل تسجيل JIT
لتفعيل تسجيل 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
ملاحظة: يحتفظ هذا الأمر ببيانات الملف الشخصي على الجهاز.