תיעוד הקצאות מותאמות

אם אתם כותבים קוד מקורי ואתם מודאגים לגבי השימוש בזיכרון, כדאי ליצור פרופיל של ההקצאות המקומיות של האפליקציה כדי לבדוק אם יש הזדמנות לאופטימיזציה.

למה כדאי לבצע פרופיל של זיכרון האפליקציה

Android מספק סביבה של זיכרון מנוהל – כשמערכת Android קובעת שהאפליקציה כבר לא משתמשת באובייקטים מסוימים, מנקה האשפה משחרר את הזיכרון שלא מנוצל בחזרה לאוסף. אנחנו כל הזמן משפרים את האופן שבו Android מאתרת זיכרון שלא בשימוש, אבל בשלב מסוים בכל הגרסאות של Android, המערכת חייבת להשהות את הקוד לזמן קצר. ברוב המקרים, ההשהיות לא מורגשות. עם זאת, אם האפליקציה מקצה זיכרון מהר יותר מהמערכת יכולה לאסוף אותו, יכול להיות שהאפליקציה תתעכב בזמן שהאוסף משחרר מספיק זיכרון כדי לעמוד במכסות שלכם. העיכוב עלול לגרום לכך שהאפליקציה תדלג על פריימים ותגרום לאיטיות גלויה.

במאמר ניהול הזיכרון של האפליקציה מפורט מידע על שיטות תכנות שיכולות לצמצם את השימוש בזיכרון של האפליקציה.

סקירה כללית על הקצאות של מודעות מותאמות

כשמריצים את המשימה מעקב אחר צריכת זיכרון (הקצאות מקומיות), הכלי Android Studio Profiler עוקב אחרי הקצאות והקצאות מחדש של אובייקטים בקוד מקומי בתקופה שציינתם, ומספק את המידע הבא:

  • הקצאות: מספר האובייקטים שהוקצו באמצעות malloc() או באמצעות האופרטור new בתקופת הזמן שנבחרה.
  • Deallocations: מספר האובייקטים שהוקצו מחדש באמצעות free() או באמצעות האופרטור delete במהלך תקופת הזמן שנבחרה.
  • Allocations Size: הגודל המצטבר בבייטים של כל ההקצאות במהלך התקופה שנבחרה.
  • Deallocations Size: הגודל המצטבר בבייטים של כל הזיכרון ששוחרר במהלך התקופה שנבחרה.
  • מספר כולל: הערך בעמודה Allocations בניכוי הערך בעמודה Deallocations.
  • Remaining Size: הערך בעמודה Allocations Size בניכוי הערך בעמודה Deallocations Size.

בכרטיסייה Visualization מוצגת תצוגה מצטברת של כל האובייקטים שקשורים לקוד מקורי ב-call stack במהלך טווח הזמן שנבחר. בעצם, הוא מראה את נפח הזיכרון הכולל של סטאק הקריאות עם המופעים שמוצגים. בשורה הראשונה מוצג שם השרשור. כברירת מחדל, האובייקטים נערמים משמאל לימין לפי גודל ההקצאה. אפשר להשתמש בתפריט הנפתח כדי לשנות את הסדר.

כברירת מחדל, הכלי לניתוח פרופיל משתמש בגודל דגימה של 2,048 בייטים: בכל פעם שמוקצים 2,048 בייטים של זיכרון, מתבצע צילום מיידי של הזיכרון. ככל שהמדגם קטן יותר, כך מתבצעות יותר קובצי snapshot בתדירות גבוהה יותר, וכך מתקבלים נתונים מדויקים יותר לגבי השימוש בזיכרון. שימוש במדגם גדול יותר מניב נתונים פחות מדויקים, אבל הוא צורך פחות משאבי מערכת ומשפר את הביצועים במהלך הצילום. במאמר עריכת הגדרות ההקלטה מוסבר איך משנים את גודל המדגם.