זמן ריצה של אנדרואיד ו-Dalvik

זמן ריצה של אנדרואיד (ART) הוא זמן הריצה המנוהל המשמש אפליקציות ושירותי מערכת מסוימים ב-Android. ART וקודמתה Dalvik נוצרו במקור במיוחד עבור פרויקט אנדרואיד. ART כזמן הריצה מבצע את פורמט ההפעלה של Dalvik (DEX) ואת מפרט ה-DEX bytecode.

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 תומך במספר אפשרויות ניפוי באגים חדשות, במיוחד בפונקציונליות הקשורה למוניטור ולאיסוף אשפה. לדוגמה, אתה יכול:

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

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

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

לדוגמה, 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 שמשחזר את הבעיה.