استخدام الذاكرة (ذاكرة RSS المجهولة + مساحة الإبدال) هو مقياس يعكس استخدام تطبيقك للذاكرة.
الذاكرة المجهولة هي الذاكرة التي لا يستند إليها ملف في مساحة التخزين، مثل تخصيصات الكومة والذاكرة المخصّصة باستخدام mmap. ويشمل ذلك عمليات تخصيص الذاكرة الديناميكية في تطبيقك، بما في ذلك كومة ذاكرة Java أو Kotlin، وعمليات تخصيص كومة الذاكرة الأصلية غير المُدارة (حيث يتم تخزين بيانات وحدات البكسل الخاصة بـ Bitmap على الإصدار 8.0 من نظام التشغيل Android (مستوى واجهة برمجة التطبيقات 26) والإصدارات الأحدث)، ومكدّسات تنفيذ سلاسل التعليمات. في حين أنّ نظام التشغيل يمكنه حذف الذاكرة المدعومة بملفات عند الحاجة، لا يمكنه حذف الذاكرة المجهولة.
حجم مجموعة البيانات الدائمة (RSS) هو إجمالي عدد صفحات الذاكرة (المشترَكة وغير المشترَكة) التي تستخدمها عملية ما والمخزَّنة في ذاكرة الوصول العشوائي (RAM) الفعلية. تُعد الصفحة "مشترَكة" إذا تم الوصول إليها من خلال أكثر من عملية واحدة (مثل التطبيقات التي تصل إلى المكتبة نفسها).
بالنسبة إلى الذاكرة المجهولة الهوية، يمكن للنظام كتابة الصفحات إلى مساحة التبديل (أو zRAM على Android) عندما تكون الذاكرة تحت الضغط. يمكن للنظام إعادة قراءة هذه الصفحات من مساحة التبديل إذا لزم الأمر.
بشكل عام، يشير استخدام الذاكرة (ذاكرة RSS المجهولة + مساحة الإبدال) إلى إجمالي عدد صفحات الذاكرة التي لا يتم الاحتفاظ بنسخة احتياطية منها في ملف على مساحة التخزين، بما في ذلك أي ذاكرة يحتفظ بها النظام أيضًا في مساحة الإبدال. يضمن تتبُّع حجم مجموعة البيانات الدائمة المجهولة (Anon RSS) بالإضافة إلى مساحة الإبدال أن ترى استهلاك الذاكرة الفعلي غير القابل للإزالة لتطبيقك.
إذا كان استخدام تطبيقك للذاكرة مرتفعًا، عليك إجراء المزيد من التحقيقات وحلّ المشكلة باستخدام الإرشادات الواردة في هذه الصفحة.
الموارد
تشخيص الاستخدام المفرط للذاكرة على الجهاز
لبدء تشخيص مصدر استخدام الذاكرة المفرط، يمكنك تسجيل لقطة لأجزاء من الذاكرة باستخدام تسجيل لقطة لأجزاء من الذاكرة في إعدادات المطوّرين أو استوديو Android أو Perfetto. ننصحك بالبدء بتسجيل لقطة لأجزاء من الذاكرة محليًا بعد اختبار تجربة المستخدم الأساسية في تطبيقك.
ننصحك بشكل خاص باختبار مسارات المستخدمين التالية:
- مكوّنات Webview وجلسات المتصفّح داخل التطبيق
- التمرير اللا نهائي الذي يتضمّن الكثير من الوسائط
- مهام سير عمل إنشاء مواد العرض وتعديلها
للتحقّق من أي تسريبات محتملة للذاكرة، شغِّل مسارات المستخدمين المعنيّة محليًا واجمع عمليات تفريغ الذاكرة المجمّعة في حالات مختلفة للعملية (مرئية وخدمة تعمل في المقدّمة ومخزّنة مؤقتًا) للتأكّد من أنّ التطبيق يحرّر الذاكرة بعد تشغيله في الخلفية. لفهم كيفية ارتباط حالات المعالجة هذه بعمليات الاسترجاع onTrimMemory، راجِع الإرشادات حول تحرير الذاكرة استجابةً للأحداث.
إذا كنت بصدد تصحيح أخطاء الذاكرة باستخدام أداة Profiler في "استوديو Android"، يمكنك أيضًا استخدام عملية الدمج مع LeakCanary لتبسيط عملية رصد تسرُّب الذاكرة وتكرار الصور النقطية من أجل تحسين استخدام الصور.
بعد جمع لقطة لأجزاء من الذاكرة، ننصحك باستخدام مهارة Android Profiler لتحليل لقطة لأجزاء من الذاكرة وتحديد المصادر المحتملة لاستخدام الذاكرة العالي.
مهارات Android
عرض على GitHubأداة Android Profiler
android skills add android-profilerفي ما يلي مثال على الردّ الذي يمكن أن تقدّمه مهارات الذكاء الاصطناعي:
I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
Summary of Findings
The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
1. [Library] Image Cache Optimization:
* Review the [Library] caching strategy. Ensure that bitmaps
loaded for animations are released or downsampled when the animation is
not in the foreground.
2. Asset Resolution Audit:
* The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
3. View Lifecycle Management:
* Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
tab are properly detached or their animations are cleared when switching between tabs.
4. Fix Surface Leaks:
* Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
native resource exhaustion.
مراجع إضافية حول تفسير عمليات تفريغ الذاكرة المؤقتة
تقدّم المراجع التالية مزيدًا من المعلومات حول تفسير عمليات تفريغ الذاكرة المؤقتة وتصحيح أخطاء استخدام الذاكرة:
- التحليل اليدوي: استخدِم إرشادات "مستكشف لقطات لأجزاء من الذاكرة" في Perfetto للتعرّف على كيفية التنقّل في تصوّرات لقطات لأجزاء من الذاكرة وتفسيرها في واجهة مستخدم Perfetto.
- عمليات تخصيص Java/Kotlin: اطّلِع على عرض لقطة أولية لأجزاء من الذاكرة في بيئة "وقت تشغيل Android" (ART) للحصول على إرشادات مفصّلة حول تحليل لقطات أجزاء من الذاكرة في بيئة "وقت تشغيل Android" (ART).
- عمليات التخصيص الأصلية: راجِع مستندات إنشاء الملفات الأصلية في Perfetto للتعرّف على كيفية جمع ملفات الذاكرة الأصلية (C/C++) وتحليلها.
- الفحص باستخدام واجهة سطر الأوامر: استخدِم الأمر adb dumpsys meminfo للحصول على تفاصيل سريعة حول استخدام تطبيقك للذاكرة على أحد الأجهزة.
تحسين استخدام الذاكرة
راجِع الأقسام التالية لمعرفة المزيد حول تحسين استخدام الذاكرة في تطبيقك:
- تقليل حجم الرموز البرمجية والموارد في تطبيقك
- مراقبة الذاكرة المتاحة واستخدام الذاكرة
- استخدام بنى رموز برمجية أكثر فعالية من حيث استخدام الذاكرة
للحصول على إرشادات تفصيلية حول حلّ مشاكل الذاكرة، راجِع دليل إدارة الذاكرة في تطبيقك.