زمان اجرای Android و Dalvik

زمان اجرای Android (ART) زمان اجرای مدیریت‌شده‌ای است که برنامه‌ها و برخی‌از سرویس‌های سیستم در Android از آن استفاده می‌کنند. ‫ART و Dalvik پیشین آن دراصل به‌طور ویژه برای پروژه Android ایجاد شده‌اند. ‫ART به‌عنوان زمان اجرا، قالب اجرایی Dalvik (DEX) و مشخصات بایت‌کد DEX را اجرا می‌کند.

‫ART و Dalvik زمان‌های اجرای سازگاری هستند که کدبایت DEX را اجرا می‌کنند، بنابراین برنامه‌هایی که برای Dalvik توسعه داده شده‌اند باید هنگام اجرا با ART کار کنند. بااین‌حال، برخی‌از تکنیک‌هایی که در Dalvik کار می‌کنند در ART کار نمی‌کنند. برای اطلاعات درباره مهم‌ترین مشکلات، درستی‌سنجی رفتار برنامه در زمان اجرای Android (ART) را ببینید.

ویژگی‌های 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 همچنین با افزودن اطلاعات پشته‌ای جاوا و بومی، اطلاعات زمینه‌ای بهبودیافته‌ای در گزارش‌های خرابی بومی برنامه ارائه می‌دهد.

گزارش مشکلات

اگر با مشکلی مواجه شدید که به‌دلیل مشکلات JNI برنامه نیست، آن را ازطریق ردیاب مشکلات پروژه منبع باز Android گزارش کنید. درصورت دردسترس بودن، adb bugreport و پیوندی به برنامه در «فروشگاه Google Play» اضافه کنید. درغیراین‌صورت، درصورت امکان، فایل APK که مشکل را بازتولید می‌کند پیوست کنید.