يشتمل وقت تشغيل Android (ART) على برنامج التحويل البرمجي في الوقت المناسب (JIT) مع ملفات تعريف التعليمات البرمجية التي تعمل باستمرار على تحسين أداء تطبيقات Android أثناء تشغيلها. يكمل مترجم JIT مترجم ART الحالي (AOT) ويحسن أداء وقت التشغيل، ويوفر مساحة التخزين، ويسرع تحديثات التطبيق والنظام. كما أنه يعمل على تحسين برنامج التحويل البرمجي AOT عن طريق تجنب تباطؤ النظام أثناء التحديثات التلقائية للتطبيقات أو إعادة تجميع التطبيقات أثناء التحديثات عبر الهواء (OTA).
على الرغم من أن JIT وAOT يستخدمان نفس المترجم مع مجموعة مشابهة من التحسينات، إلا أن الكود الذي تم إنشاؤه قد لا يكون متطابقًا. يستخدم JIT معلومات نوع وقت التشغيل، ويمكنه القيام بتضمين أفضل، ويجعل تجميع استبدال المكدس (OSR) ممكنًا، وكل ذلك يولد تعليمات برمجية مختلفة قليلاً.
هندسة جيت
تجميع JIT
يتضمن تجميع JIT الأنشطة التالية:
- يقوم المستخدم بتشغيل التطبيق، والذي يقوم بعد ذلك بتشغيل ART لتحميل ملف
.dex
.- إذا كان الملف
.oat
(الملف الثنائي AOT لملف.dex
) متاحًا، فإن ART يستخدمه مباشرة. على الرغم من أن ملفات.oat
يتم إنشاؤها بانتظام، إلا أنها لا تحتوي دائمًا على تعليمات برمجية مجمعة (ثنائي AOT). - إذا كان الملف
.oat
لا يحتوي على تعليمات برمجية مجمعة، فسيتم تشغيل ART من خلال JIT والمترجم لتنفيذ ملف.dex
.
- إذا كان الملف
- يتم تمكين JIT لأي تطبيق لم يتم تجميعه وفقًا لمرشح
speed
التحويل البرمجي (الذي يقول "قم بتجميع أكبر قدر ممكن من التطبيق"). - يتم تفريغ بيانات ملف تعريف JIT في ملف في دليل النظام الذي يمكن للتطبيق فقط الوصول إليه.
- يقوم البرنامج الخفي لتجميع AOT (
dex2oat
) بتوزيع هذا الملف لتشغيل عملية التحويل البرمجي الخاصة به.الشكل 3. أنشطة البرنامج الخفي JIT.
تعد خدمة Google Play مثالاً تستخدمه التطبيقات الأخرى التي تعمل بشكل مشابه للمكتبات المشتركة.
سير عمل JIT
- يتم تخزين معلومات ملفات التعريف في ذاكرة التخزين المؤقت للتعليمات البرمجية وإخضاعها لجمع البيانات المهملة تحت ضغط الذاكرة.
- ليس هناك ما يضمن أن اللقطة التي تم التقاطها عندما كان التطبيق في الخلفية ستحتوي على بيانات كاملة (على سبيل المثال، كل ما تم JITed).
- لا توجد محاولة لضمان تسجيل كل شيء (لأن ذلك قد يؤثر على أداء وقت التشغيل).
- يمكن أن تكون الطرق في ثلاث حالات مختلفة:
- مترجم (رمز dex)
- JIT جمعت
- تم تجميع 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
مسح بيانات الملف الشخصي
على نظام التشغيل Android 13 أو الإصدارات الأقدم
لمسح بيانات ملف التعريف المحلي وإزالة التعليمات البرمجية المترجمة، قم بتشغيل ما يلي:
adb shell pm compile --reset
على نظام التشغيل Android 14 أو الإصدارات الأحدث
لمسح بيانات الملف الشخصي المحلي فقط:
adb shell pm art clear-app-profiles
ملاحظة: على عكس الأمر الخاص بنظام التشغيل Android 13 أو الإصدارات الأقدم، لا يقوم هذا الأمر بمسح بيانات الملف الشخصي الخارجية (`.dm`) المثبتة مع التطبيق.
لمسح بيانات ملف التعريف المحلي وإزالة التعليمات البرمجية المترجمة التي تم إنشاؤها من بيانات ملف التعريف المحلي (أي لإعادة التعيين إلى حالة التثبيت)، قم بتشغيل ما يلي:
adb shell pm compile --reset
ملاحظة: لا يؤدي هذا الأمر إلى إزالة التعليمات البرمجية المجمعة التي تم إنشاؤها من بيانات الملف الشخصي الخارجية (`.dm`) المثبتة مع التطبيق.
لمسح كافة التعليمات البرمجية المترجمة، قم بتشغيل هذا الأمر:
adb shell cmd package compile -m verify -f
ملاحظة: يحتفظ هذا الأمر ببيانات ملف التعريف المحلي.