يعمل نظام التشغيل Android على فرضية أنّ الذاكرة الفارغة هي ذاكرة مهدورة. يحاول نظام Android استخدام كل الذاكرة المتاحة في جميع الأوقات. على سبيل المثال، يحفظ النظام التطبيقات في الذاكرة بعد إغلاقها حتى يتمكّن المستخدم من العودة إليها بسرعة. لهذا السبب، تعمل أجهزة Android غالبًا باستخدام ذاكرة مجانية قليلة جدًا (اطّلِع على تخصيص ذاكرة Android هنا).
تعمل عملية الخادم غير القابل للإنهاء لميزة "إغلاق التطبيقات بسبب نقص الذاكرة" (LMK) في نظام Android على رصد حالة الذاكرة في نظام Android قيد التشغيل والاستجابة لحالات ازدحام الذاكرة عن طريق إغلاق العمليات الأقل أهمية للحفاظ على أداء النظام على مستويات مقبولة.
لتحديد العملية التي سيتم إغلاقها، يستخدم الخادم الخفي LMK نتيجة تعذُّر توفُّر ذاكرة تُعرف باسم oom_adj_score من أجل منح الأولوية للعمليات الجارية. يتم إيقاف العمليات التي تحقّق نتيجة عالية أولاً. يتم أولاً إنهاء التطبيقات التي تعمل في الخلفية، ثم عمليات النظام. يسرد الجدول التالي فئات التقييم في LMK من الأعلى إلى الأدنى. يتم أولاً إيقاف العناصر في الفئة التي حققت أعلى نتيجة في الصف الأول:

مقياس LMK في "مؤشرات Android الحيوية"
يمكن أن تساعدك "مؤشرات Android الحيوية" في مراقبة معدّل LMK لتطبيقك وتحسينه. تقيس метриكس Android vitals نسبة واحدة فقط من أعطال LMK، وهي نسبة أعطال LMK التي لاحظها المستخدمون.
يعرض المقياس النسبة المئوية للمستخدمين النشطين يوميًا الذين واجهوا عطلًا واحدًا على الأقل من أعطال "إغلاق التطبيقات بسبب نقص الذاكرة (LMK)" الملحوظة. ويشير هذا العُطل إلى عُطل LMK ظهر للمستخدم على الأرجح. على سبيل المثال، أعطال LMK التي تحدث أثناء عرض تطبيقك لنشاط معيَّن أو تشغيله كخدمة تعمل في المقدّمة.
يمكنك العثور على المقياس ضمن قسم الثبات في "مؤشرات Android الحيوية":

كما هو الحال مع المقاييس الأساسية الأخرى لأداء التطبيق، مثل أخطاء ANR والأعطال، يمكنك فلترة المقاييس أو مقارنة مقاييسك بتطبيق مشابه أو تتبُّع تغيُّر المقياس على مدار فترة زمنية طويلة (تصل إلى 3 سنوات). تتوفّر البيانات للتطبيقات الحالية اعتبارًا من 28 كانون الثاني (يناير) 2025.

أدوات تحليل استخدام الذاكرة
يمكن أن تساعدك الأدوات التالية في العثور على مشاكل الذاكرة وتشخيصها بالطرق التالية:
- اطّلِع على كيفية تخصيص تطبيقك للذاكرة بمرور الوقت. يمكنك العثور على رسم بياني في الوقت الفعلي لحجم الذاكرة التي يستخدمها تطبيقك وعدد عناصر Java المخصّصة ووقت جمع المهملات.
- ابدأ أحداث جمع المهملات وخذ لقطة شاشة لمكبّر Java أثناء تشغيل تطبيقك.
- يمكنك تسجيل عمليات تخصيص الذاكرة في تطبيقك، وفحص جميع العناصر المخصّصة، وعرض تتبُّع تسلسل استدعاء الدوال البرمجية لكل عملية تخصيص.
أداة تحليل الذاكرة في Android Studio
يقدّم "استوديو Android" أداة محلل الذاكرة كأحد مكوّنات أداة محلل أداء Android التي تساعدك في تحديد تسرب الذاكرة وتغييرها بشكل متكرّر، ما قد يؤدي إلى حدوث تقطُّع في الأداء وتوقُّف التطبيقات عن العمل وحتى تعطُّلها. يعرض أداة تحليل الأداء رسمًا بيانيًا في الوقت الفعلي لاستخدام تطبيقك للذاكرة، ويسمح لك بالتقاط بيانات عن ذاكرة الشريحة وفرض جمع المهملات وتتبُّع منح الذاكرة.

أدوات تحليل استخدام الذاكرة في Unity
إذا كنت تستخدِم Unity Engine لإنشاء تطبيقاتك، يمكنك اتّباع إرشادات تحليل الذاكرة في Unity. تقدّم Unity أداتين لتحليل استخدام الذاكرة في تطبيقك.
الأولى هي وحدة تحليل الذاكرة، وهي أداة تحليل مدمجة تمنحك معلومات أساسية عن الأماكن التي يستخدم فيها تطبيقك الذاكرة.

الأداة الثانية هي حزمة "أداة تحليل الذاكرة"، وهي حزمة Unity يمكنك إضافتها إلى مشروعك. تضيف الحزمة نافذة "أداة تحليل الذاكرة" إضافية إلى "محرر Unity". يتيح لك "أداة تحليل استخدام الذاكرة" تحليل استخدام الذاكرة في تطبيقك بمزيد من التفصيل. يمكنك تخزين ومقارنة اللقطات للعثور على عمليات تسرُّب الذاكرة أو الاطّلاع على تخطيط الذاكرة للعثور على مشاكل تجزئة الذاكرة.

إحصاءات الذاكرة في Unreal
يمكن للتطبيقات التي تم إنشاؤها باستخدام Unreal Engine استخدام إحصاءات الذاكرة في Unreal لمعرفة معلومات تفصيلية عن تخصيص الذاكرة وإلغاء تخصيصها، بما في ذلك علامات الذاكرة ذات المستوى المنخفض (LLM) وسلسلة استدعاء الدوال المرتبطة بكتل الذاكرة.
يمكن لنظام طلبات البحث في "إحصاءات الذاكرة" العثور على عمليات التخصيص النشطة في أي وقت، وتحديد التغييرات في استخدام الذاكرة، وتحديد مكان تسرُّب الذاكرة، والتمييز بين عمليات التخصيص على المدى القصير والمدى الطويل.
اعتبارًا من الإصدار 5.4 من Unreal Engine، تتيح ميزة "إحصاءات الذاكرة" تتبُّع الذاكرة باستخدام تسلسلات استدعاء الدوال لمشاريع Android.

إحصاءات انخفاض سعة الذاكرة
يقدّم Android وظائف الاستدعاء وواجهات برمجة التطبيقات التي تتيح لك تقليل متطلبات الذاكرة للعبة وتحديد سبب إنهاء عمليات تشغيل اللعبة السابقة.
عمليات معاودة الاتصال
لا تسجِّل طلبات استدعاء trim
المنتهية الصلاحية. لا يتضمّن نظام التشغيل Android أي مكتبات برمجة تطبيقات لرصد أحداث الضغط على الذاكرة الأصلية عندما يصل النظام إلى حدود الذاكرة.
لم تكن طلبات الاستدعاء لقطع المحتوى مفيدة في منع عمليات الإغلاق بسبب انخفاض سعة الذاكرة،
لذلك أوقف نظام التشغيل Android جميعها
باستثناء TRIM_MEMORY_UI_HIDDEN
وTRIM_MEMORY_BACKGROUND
.
إنهاء المباراة
يحاول نظام Android استخدام كل الذاكرة المتاحة لتخزين التطبيقات والألعاب مؤقتًا لضمان تحميلها بسرعة (ما يؤدي إلى تحسين تجربة المستخدم)، ولكن عندما تصبح الذاكرة محدودة، يوقف النظام التطبيقات والألعاب التي تستهلك الكثير من الذاكرة لتوفير مساحة في الذاكرة من أجل تشغيل الجهاز بشكلٍ طبيعي.
تشمل المعلومات والإحصاءات وأفضل الممارسات لمساعدتك في تحسين استخدام ذاكرة الألعاب ما يلي:
- استخدِم
ApplicationExitInfo
: تعرض هذه الواجهة سبب إنهاء نظام Android لجلسة تشغيل اللعبة السابقة. استخدِمApplicationExitInfo
للتحقّق من انخفاض سعة الذاكرة كسبب لإيقاف عملية سابقة. تحقّق ممّا إذا تم إغلاق اللعبة بسبب انخفاض سعة الذاكرة كي تتم تحسين اللعبة لاستخدام سعة ذاكرة أقل على هذا الجهاز. - الاطّلاع على إجمالي ذاكرة الوصول العشوائي (RAM):
لمنع إغلاق الألعاب عندما تكون في
المقدّمة ومطابقة إمكانات الجهاز، اطّلِع على إجمالي
ذاكرة الوصول العشوائي (RAM) لكل جهاز للحصول على تفاصيل دقيقة لضبط استخدام ذاكرة الألعاب
استنادًا إلى ذلك. إذا كان الهدف هو منع إغلاق التطبيقات بعد فترة قصيرة
بعد نقلها إلى الخلفية (للسماح للاعب بتنفيذ مهام متعدّدة)، استخدِم طلبات إعادة الاتصال
trim
(
TRIM_MEMORY_UI_HIDDEN
على وجه التحديد) لتقليل استخدام ذاكرة اللعبة.