تنفيذ مجمّع ART في الوقت المناسب

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

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

بنية التجميع أثناء التشغيل (JIT)

بنية التجميع أثناء التشغيل (JIT)
الشكل 1 بنية JIT.

تجميع JIT

يتضمن التجميع في JIT الأنشطة التالية:

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

    البرنامج الخفي JIT
    الشكل 3. أنشطة البرنامج الخفي في JIT.

تُعد خدمة Google Play مثالاً تستخدمها التطبيقات الأخرى التي تعمل تشبه المكتبات المشتركة.

سير عمل JIT

بنية التجميع أثناء التشغيل (JIT)
الشكل 4 تدفق بيانات JIT.
  • يتم تخزين معلومات التحليل في ذاكرة التخزين المؤقت للرموز البرمجية ووضعها في المهملات البيانات تحت ضغط الذاكرة.
    • ليس هناك ما يضمن الحصول على لقطة عندما كان التطبيق في سيحتوي الخلفية على بيانات كاملة (أي كل شيء كان JITed).
    • لا توجد محاولة لضمان تسجيل كل شيء (لأن ذلك قد يؤثر على أداء بيئة التشغيل).
  • يمكن أن تكون الطرق في ثلاث حالات مختلفة:
    • مفسّر (رمز dex)
    • تم تجميع JIT.
    • تم تجميع AOT
    في حال توفُّر رمزَي JIT وAOT (على سبيل المثال، بسبب تكرار عمليات إلغاء التحسين): ويفضل التعليمة البرمجية JIT.
  • متطلّبات الذاكرة لتشغيل التجميع أثناء التشغيل (JIT) بدون التأثير في التطبيق الذي يعمل في المقدّمة الأداء على التطبيق المعني. التطبيقات الكبيرة تتطلب ذاكرة أكبر من التطبيقات الصغيرة. بشكل عام، تستقر التطبيقات الكبيرة الحجم حوالي 4 ميغابايت.

تفعيل تسجيل JIT

لتفعيل تسجيل JIT، شغِّل الطلبات التالية:

adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start

إيقاف JIT

لإيقاف 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 

ملاحظة: يحتفظ هذا الأمر ببيانات الملف الشخصي على الجهاز.