وقت تشغيل Android و Dalvik

وقت تشغيل Android (ART) هو وقت التشغيل المُدار الذي تستخدمه التطبيقات وبعض خدمات النظام على Android. تم إنشاء ART وسلفه Dalvik في الأصل خصيصًا لمشروع Android. يقوم ART أثناء وقت التشغيل بتنفيذ تنسيق Dalvik القابل للتنفيذ (DEX) ومواصفات رمز DEX الثانوي.

يعد ART وDalvik أوقات تشغيل متوافقة تعمل بنظام DEX bytecode، لذا يجب أن تعمل التطبيقات المطورة لـ Dalvik عند التشغيل مع ART. ومع ذلك، فإن بعض التقنيات التي تعمل على Dalvik لا تعمل على ART. للحصول على معلومات حول أهم المشكلات، راجع التحقق من سلوك التطبيق في وقت تشغيل Android (ART) .

ميزات الفن

فيما يلي بعض الميزات الرئيسية التي تنفذها ART.

التجميع المسبق (AOT).

يقدم ART تجميعًا مسبقًا (AOT)، والذي يمكنه تحسين أداء التطبيق. تتمتع ART أيضًا بميزة التحقق من وقت التثبيت بشكل أكثر صرامة من Dalvik.

في وقت التثبيت، يقوم ART بتجميع التطبيقات باستخدام أداة dex2oat الموجودة على الجهاز. تقبل هذه الأداة المساعدة ملفات DEX كمدخلات وتقوم بإنشاء تطبيق مجمع قابل للتنفيذ للجهاز المستهدف. يجب أن تكون الأداة المساعدة قادرة على تجميع كافة ملفات DEX الصالحة دون صعوبة. ومع ذلك، فإن بعض أدوات ما بعد المعالجة تنتج ملفات غير صالحة يمكن أن يتحملها Dalvik ولكن لا يمكن تجميعها بواسطة ART. لمزيد من المعلومات، راجع معالجة مشكلات تجميع البيانات المهملة .

تحسين جمع القمامة

جمع البيانات المهملة (GC) يستهلك الكثير من الموارد، مما قد يؤدي إلى إضعاف أداء التطبيق، مما يؤدي إلى عرض متقطع، واستجابة ضعيفة لواجهة المستخدم، ومشكلات أخرى. تعمل ART على تحسين جمع القمامة بعدة طرق:

  • تصميم متزامن في الغالب مع توقف GC واحد
  • النسخ المتزامن لتقليل استخدام ذاكرة الخلفية وتجزئتها
  • طول توقف GC مستقل عن حجم الكومة
  • أداة التجميع ذات إجمالي وقت GC أقل للحالة الخاصة لتنظيف الكائنات المخصصة مؤخرًا وقصيرة العمر
  • تحسين بيئة العمل الخاصة بجمع البيانات المهملة، مما يجعل مجموعات البيانات المهملة المتزامنة أكثر دقة في الوقت المناسب، مما يجعل أحداث GC_FOR_ALLOC نادرة للغاية في حالات الاستخدام النموذجية

تحسينات التطوير والتصحيح

يقدم ART عددًا من الميزات لتحسين تطوير التطبيقات وتصحيح الأخطاء.

دعم أخذ العينات من التعريف

تاريخيًا، استخدم المطورون أداة Traceview (المصممة لتتبع تنفيذ التطبيق) كملف تعريف. في حين أن Traceview يقدم معلومات مفيدة، إلا أن نتائجه على Dalvik قد انحرفت بسبب الحمل الزائد لكل طريقة، ويؤثر استخدام الأداة بشكل ملحوظ على أداء وقت التشغيل.

يضيف ART دعمًا لملف تعريف العينات المخصص الذي لا يحتوي على هذه القيود. وهذا يعطي رؤية أكثر دقة لتنفيذ التطبيق دون حدوث تباطؤ كبير. تمت إضافة دعم أخذ العينات إلى Traceview لـ Dalvik في إصدار KitKat.

دعم لمزيد من ميزات التصحيح

يدعم ART عددًا من خيارات تصحيح الأخطاء الجديدة، خاصة في الوظائف المتعلقة بالمراقبة وجمع البيانات المهملة. على سبيل المثال، يمكنك:

  • تعرف على الأقفال الموجودة في آثار المكدس، ثم انتقل إلى الخيط الذي يحمل القفل.
  • اسأل عن عدد المثيلات المباشرة الموجودة لفئة معينة، واطلب رؤية المثيلات ومعرفة المراجع التي تحافظ على الكائن حيًا.
  • تصفية الأحداث (مثل نقطة التوقف) لمثيل محدد.
  • راجع القيمة التي يتم إرجاعها بواسطة إحدى الطرق عند خروجها (باستخدام أحداث "method-exit").
  • قم بتعيين نقطة مراقبة الحقل لتعليق تنفيذ البرنامج عند الوصول إلى حقل معين و/أو تعديله.

تحسين تفاصيل التشخيص في الاستثناءات وتقارير الأعطال

يمنحك ART أكبر قدر ممكن من السياق والتفاصيل عند حدوث استثناءات في وقت التشغيل. يوفر ART تفاصيل استثناء موسعة لـ java.lang.ClassCastException و java.lang.ClassNotFoundException و java.lang.NullPointerException . (قدمت الإصدارات الأحدث من Dalvik تفاصيل استثناء موسعة لـ java.lang.ArrayIndexOutOfBoundsException و java.lang.ArrayStoreException ، والتي تتضمن الآن حجم المصفوفة والإزاحة خارج الحدود، ويقوم ART بذلك أيضًا.)

على سبيل المثال، يعرض java.lang.NullPointerException الآن معلومات حول ما كان التطبيق يحاول القيام به باستخدام المؤشر الفارغ، مثل الحقل الذي كان التطبيق يحاول الكتابة إليه، أو الطريقة التي كان يحاول الاتصال بها. فيما يلي بعض الأمثلة النموذجية:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

يوفر ART أيضًا معلومات سياقية محسنة في تقارير الأعطال الأصلية للتطبيق، من خلال تضمين معلومات Java والمكدس الأصلي.

الإبلاغ عن المشاكل

إذا واجهت أي مشكلات ليست بسبب مشكلات تطبيق JNI، فأبلغ عنها من خلال Android Open Source Project Issue Tracker . قم بتضمين adb bugreport ورابط التطبيق في متجر Google Play إذا كان ذلك متاحًا. بخلاف ذلك، قم بإرفاق ملف APK الذي يعيد إنتاج المشكلة، إن أمكن.