Android Runtime (ART) و Dalvik

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

ART و Dalvik زمان‌های اجرا سازگار هستند که Dex bytecode را اجرا می‌کنند، بنابراین برنامه‌های توسعه‌یافته برای 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 که مشکل را بازتولید می کند، پیوست کنید.