תיעוד הקצאות מותאמות
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
אם אתם כותבים קוד מקורי ואתם מודאגים לגבי השימוש בזיכרון, כדאי ליצור פרופיל של ההקצאות המקומיות של האפליקציה כדי לבדוק אם יש הזדמנות לאופטימיזציה.
למה כדאי לבצע פרופיל של זיכרון האפליקציה
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 בתדירות גבוהה יותר, וכך מתקבלים נתונים מדויקים יותר לגבי השימוש בזיכרון. שימוש במדגם גדול יותר מניב נתונים פחות מדויקים, אבל הוא צורך פחות משאבי מערכת ומשפר את הביצועים במהלך הצילום. במאמר עריכת הגדרות ההקלטה מוסבר איך משנים את גודל המדגם.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Record native allocations\n\nIf you're writing native code and concerned about its memory usage, it's helpful\nto profile your app's native allocations to discover if there's opportunity to\noptimize.\n\nWhy you should profile your app memory\n--------------------------------------\n\nAndroid provides a [managed memory\nenvironment](/topic/performance/memory-overview)---when Android determines that\nyour app is no longer using some objects, the garbage collector releases the\nunused memory back to the heap. How Android goes about finding unused memory is\nconstantly being improved, but at some point on all Android versions, the system\nmust briefly pause your code. Most of the time, the pauses are imperceivable.\nHowever, if your app allocates memory faster than the system can collect it,\nyour app might be delayed while the collector frees enough memory to satisfy\nyour allocations. The delay could cause your app to skip frames and cause\nvisible slowness.\n\nFor information about programming practices that can reduce your app's memory\nuse, read [Manage your app's memory](/topic/performance/memory).\n\nNative allocations overview\n---------------------------\n\nWhen you run the [**Track Memory Consumption (Native Allocations)**](/studio/profile#start-profiling) task,\nthe Android Studio Profiler tracks allocations and deallocations of objects in\nnative code for the time period that you specify and provides the following\ninformation:\n\n- **Allocations** : A count of objects allocated using `malloc()` or the `new` operator during the selected time period.\n- **Deallocations** : A count of objects deallocated using `free()` or the `delete` operator during the selected time period.\n- **Allocations Size**: The aggregated size in bytes of all allocations during the selected time period.\n- **Deallocations Size**: The aggregated size in bytes of all freed memory during the selected time period.\n- **Total Count** : The value in the **Allocations** column minus the value in the **Deallocations** column.\n- **Remaining Size** : The value in the **Allocations Size** column minus the value in the **Deallocations Size** column.\n\nThe **Visualization** tab shows an aggregated view of all the objects related to\nnative code in the call stack during the time range selected. It essentially\nshows you how much total memory the callstack with the instances shown takes.\nThe first row shows the thread name. By default, the objects are stacked left to\nright based on allocation size; use the drop-down to change the ordering.\n\nBy default, the profiler uses a sample size of 2048 bytes: Every time 2048 bytes\nof memory are allocated, a snapshot of memory is taken. A smaller sample size\nresults in more frequent snapshots, yielding more accurate data about memory\nusage. A larger sample size yields less accurate data, but it consumes fewer\nsystem resources and improves performance while recording. To change the sample\nsize, see [Edit the recording configuration](/studio/profile#edit-recording)."]]