סביבת זמן ריצה של Android ו-Dalvik

זמן הריצה המנוהל של Android (ART) הוא זמן הריצה המנוהל על ידי אפליקציות ומערכות מסוימות ב-Android. ART וקודמו Dalvik נוצרו במקור במיוחד לפרויקט Android. ART כזמן הריצה מבצע את פעולת ה-Dalvik פורמט הפעלה (DEX) ומפרט בייטקוד 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 תומך במספר אפשרויות חדשות לניפוי באגים, במיוחד במודלים פונקציונליות שקשורה לאיסוף אשפה. לדוגמה, אתם יכולים:

  • אפשר לראות אילו מנעולים נמצאים בדוחות הקריסות, ואז לדלג לשרשור מחזיקה מנעול.
  • אפשר לשאול כמה מופעים חיים יש כיתה מסוימת, ולבקש לראות את ולראות אילו הפניות משאירים אובייקט פעיל.
  • סינון אירועים (כמו נקודת עצירה (breakpoint)) של מופע ספציפי.
  • הצגת הערך שהוחזר באמצעות שיטה ביציאה (באמצעות 'method-exit' ).
  • הגדרת נקודת מעקב בשדה כדי להשעות את הביצוע של תוכנית בזמן מתבצעת גישה ו/או שינוי של השדה.

אבחון משופר של חריגים ודוחות קריסה

בעזרת ART אפשר לקבל הקשר ופרטים רבים ככל האפשר כשיש חריגים בסביבת זמן הריצה יתרחשו. ART מספק פרטי חריגים מורחבים עבור java.lang.ClassCastException, java.lang.ClassNotFoundException, ו-java.lang.NullPointerException. (גרסאות מאוחרות יותר של Dalvik סיפקו פרטי חריגים מורחבים עבור java.lang.ArrayIndexOutOfBoundsException ו-java.lang.ArrayStoreException, שכוללות עכשיו את גודל המערך ואת ההיסט מחוץ לתחום, עושה גם את הפעולה הזו).

לדוגמה, java.lang.NullPointerException. מציג מידע על מה שהאפליקציה ניסתה לעשות עם מצביע ה-null, כמו השדה שהאפליקציה ניסתה לכתוב בו, או השיטה שבה היא ניסתה שיחה. כמה דוגמאות טיפוסיות:

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 מעקב אחרי בעיות בפרויקט. הוספה של adb bugreport וקישור אל את האפליקציה בחנות Google Play, אם היא זמינה. אחרת, אם אפשר, צרף ה-APK שמשחזר את הבעיה.