Android runtime (ART) כולל קומפילטור בזמן אמת (JIT) עם פרופיל קוד, שמאפשר לשפר באופן שוטף את הביצועים של אפליקציות Android במהלך ההרצה שלהן. המהדר של JIT משלים את המהדר הנוכחי של ART (AOT), ומשפר את הביצועים בסביבת זמן הריצה, חוסך מקום באחסון ומאיץ את עדכוני האפליקציות והמערכת. הוא גם משפר את המהדר של AOT על ידי הימנעות מהאטה של המערכת במהלך עדכונים אוטומטיים של אפליקציות או מהדרה מחדש של אפליקציות במהלך עדכונים אוויריים (OTA).
למרות שב-JIT וב-AOT נעשה שימוש באותו מהדר עם קבוצה דומה של אופטימיזציות, יכול להיות שהקוד שנוצר לא יהיה זהה. ב-JIT נעשה שימוש במידע על סוגי זמן ריצה, אפשר לבצע הטמעה טובה יותר בקוד ואפשר לבצע הידור בזמן ריצה (OSR), והכל יוצר קוד שונה במקצת.
ארכיטקטורת JIT

הידור JIT
הידור JIT כולל את הפעילויות הבאות:

- המשתמש מפעיל את האפליקציה, וכתוצאה מכך ART מפעיל את טעינת הקובץ
.dex
.- אם קובץ
.oat
(קובץ הבינארי של AOT לקובץ.dex
) זמין, ART משתמש בו ישירות. קובצי.oat
נוצרים באופן קבוע, אבל הם לא תמיד מכילים קוד מקודד (קובץ בינארי של AOT). - אם קובץ
.oat
לא מכיל קוד שנאסף, ה-ART פועל דרך ה-JIT והמתרגם כדי להריץ את קובץ.dex
.
- אם קובץ
- הידור JIT מופעל בכל אפליקציה שלא עוברת הידור בהתאם למסנן הידור
speed
(שמשמעותו 'לעבד כמה שיותר מהאפליקציה'). - נתוני הפרופיל של ה-JIT מוטמעים בקובץ בתיקיית מערכת שרק לאפליקציה יש גישה אליו.
- הדימון של הידור ה-AOT (
dex2oat
) מנתח את הקובץ הזה כדי להפעיל את הידור הקוד.
איור 3. פעילויות של דימון JIT.
שירות Google Play הוא דוגמה לאפליקציות אחרות שפועלות באופן דומה לספריות משותפות.
תהליך עבודה של JIT

- פרטי הפרופיל מאוחסנים במטמון הקוד, ועוברים איסוף גרוטאות אם יש לחץ על הזיכרון.
- אין ערובה שצילום המסך שצולם כשהאפליקציה הייתה ברקע יכיל נתונים מלאים (כלומר, כל מה שהופעל ב-JIT).
- אין ניסיון לוודא שכל מה שקורה מתועד (כי זה עלול להשפיע על הביצועים בזמן הריצה).
- שיטות יכולות להיות בשלוש סטטוסים שונים:
- מפורש (קוד DEX)
- הידור JIT
- הידור AOT
- דרישת הזיכרון להפעלת JIT בלי להשפיע על הביצועים של האפליקציה שבחזית תלויה באפליקציה הרלוונטית. אפליקציות גדולות דורשות יותר זיכרון מאפליקציות קטנות. באופן כללי, אפליקציות גדולות מתאזנות סביב 4MB.
הפעלת רישום ביומן של JIT
כדי להפעיל את הרישום בזמן אמת, מריצים את הפקודות הבאות:
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start
השבתת JIT
כדי להשבית את JIT, מריצים את הפקודות הבאות:
adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start
אילוץ הידור
כדי לאלץ הידור, מריצים את הפקודה הבאה:
adb shell cmd package compile
תרחישים נפוצים לדוגמה שבהם כדאי לאלץ הידור של חבילת קוד ספציפית:
- מבוסס-פרופיל:
adb shell cmd package compile -m speed-profile -f my-package
- מלא:
adb shell cmd package compile -m speed -f my-package
תרחישים נפוצים לדוגמה שבהם כדאי לאלץ את הידור כל החבילות:
- מבוסס-פרופיל:
adb shell cmd package compile -m speed-profile -f -a
- מלא:
adb shell cmd package compile -m speed -f -a
ניקוי נתוני הפרופיל
ב-Android מגרסה 13 וגרסאות קודמות
כדי לנקות את נתוני הפרופיל המקומיים ולהסיר קוד שנאסף, מריצים את הפקודה הבאה:
adb shell pm compile --reset
ב-Android מגרסה 14 ואילך
כדי לנקות רק את נתוני הפרופיל המקומיים:
adb shell pm art clear-app-profiles
הערה: בניגוד לפקודה ל-Android 13 ואילך, הפקודה הזו לא מנקה נתוני פרופיל חיצוניים (.dm) שמותקנים עם האפליקציה.
כדי לנקות את נתוני הפרופיל המקומיים ולהסיר קוד שנוצר מנתוני הפרופיל המקומיים (כלומר, כדי לאפס למצב ההתקנה), מריצים את הפקודה הבאה:
adb shell pm compile --reset
הערה: הפקודה הזו לא מסירה קוד שנוצר מנתוני פרופיל חיצוניים (.dm) שמותקנים עם האפליקציה.
כדי לנקות את כל הקוד המהדר, מריצים את הפקודה הבאה:
adb shell cmd package compile -m verify -f
הערה: הפקודה הזו שומרת את נתוני הפרופיל המקומיים.