Android का लो मेमोरी किलर (एलएमके) डीमन, चल रहे Android सिस्टम की मेमोरी की स्थिति पर नज़र रखता है. साथ ही, मेमोरी पर ज़्यादा दबाव पड़ने पर, कम ज़रूरी प्रोसेस को बंद कर देता है. 'Android की ज़रूरी जानकारी' सुविधा, Google Play Console में उपयोगकर्ता को दिखने वाले एलएमके टर्मिनेशन को ट्रैक करती है और उनकी रिपोर्ट करती है. इससे आपको मेमोरी प्रेशर से जुड़ी उन समस्याओं की पहचान करने में मदद मिलती है जिनका असर आपके उपयोगकर्ताओं पर पड़ता है.
'Android की ज़रूरी जानकारी' में एलएमके मेट्रिक
'Android की ज़रूरी जानकारी' सुविधा की मदद से, अपने ऐप्लिकेशन के एलएमके रेट को मॉनिटर किया जा सकता है और उसे बेहतर बनाया जा सकता है. Android की ज़रूरी जानकारी, सिर्फ़ एक एलएमके रेट को मेज़र करती है: यूज़र-पर्सीव्ड एलएमके रेट.
इस मेट्रिक से, हर दिन के आपके ऐसे ऐक्टिव उपयोगकर्ताओं का प्रतिशत पता चलता है जिन्हें कम से कम एक बार यूज़र-पर्सीव्ड एलएमके से जुड़ी समस्या आई. यूज़र-पर्सीव्ड एलएमके का मतलब एलएमके वाली उन गड़बड़ियों से है जो शायद ऐप्लिकेशन पर उपयोगकर्ता को दिखी हों. उदाहरण के लिए, इसमें एलएमके की वे गड़बड़ियां शामिल हैं जो तब होती हैं, जब आपका ऐप्लिकेशन कोई गतिविधि दिखा रहा हो या किसी फ़ोरग्राउंड सेवा के तौर पर काम कर रहा हो. इनकी वजह से, प्रोसेस तुरंत और अचानक बंद हो जाती है. असली उपयोगकर्ता को ऐसा लगता है कि ऐप्लिकेशन क्रैश हो गया है. इससे अक्सर लाइफ़साइकल की स्थिति को सेव करने के स्टैंडर्ड तरीके बायपास हो जाते हैं. इस वजह से, उपयोगकर्ता की प्रोग्रेस सेव नहीं हो पाती.
'Android की ज़रूरी जानकारी' सुविधा, प्रोसेस के बंद होने पर फ़ोकस करती है. ऐसा इसलिए, क्योंकि ये मेमोरी को ठीक से मैनेज न करने की समस्याओं के लिए, हाई-फ़िडेलिटी प्रॉक्सी के तौर पर काम करती हैं. अगर एलएमके रेट 1% से ज़्यादा है, तो इसका मतलब है कि आपको तुरंत कार्रवाई करने की ज़रूरत है. हालांकि, एलएमके रेट कम होने का यह मतलब नहीं है कि ऐप्लिकेशन की मेमोरी का इस्तेमाल सही है. इस रेट के कम होने का मतलब यह हो सकता है कि एलएमके डीमन, बैकग्राउंड में चल रही प्रोसेस को बार-बार बंद कर रहा है. इससे "वॉर्म स्टार्ट" की परफ़ॉर्मेंस और एक साथ कई काम करने की सुविधा पर असर पड़ता है.
यह मेट्रिक, Android की ज़रूरी जानकारी में स्टेबिलिटी सेक्शन में देखी जा सकती है:
एएनआर और क्रैश जैसी अन्य सबसे ज़रूरी जानकारी की तरह, इस मेट्रिक को भी फ़िल्टर किया जा सकता है. साथ ही, अपनी मेट्रिक की तुलना अपने जैसे अन्य मिलते-जुलते ऐप्लिकेशन की मेट्रिक से की जा सकती है. इसके अलावा, लंबे समय (तीन साल तक) के लिए मेट्रिक में होने वाले बदलाव को मॉनिटर किया जा सकता है. मौजूदा ऐप्लिकेशन के लिए, 28 जनवरी, 2025 से डेटा उपलब्ध है.
लो मेमोरी किलर डीमन कैसे काम करता है
Android प्लैटफ़ॉर्म इस सिद्धांत पर काम करता है कि खाली मेमोरी, बर्बाद हुई मेमोरी है. Android, हर समय उपलब्ध मेमोरी का इस्तेमाल करने की कोशिश करता है. उदाहरण के लिए, सिस्टम ऐप्लिकेशन बंद होने के बाद भी उन्हें मेमोरी में रखता है, ताकि उपयोगकर्ता तुरंत उन पर वापस स्विच कर सके. इस वजह से, Android डिवाइसों में अक्सर बहुत कम मेमोरी खाली रहती है (प्रोसेस के बीच मेमोरी का बंटवारा देखें).
मेमोरी कम होने पर, लो मेमोरी किलर (एलएमके) डीमन, आउट ऑफ़ मेमोरी स्कोर का इस्तेमाल करके यह तय करता है कि किस प्रोसेस को बंद करना है. इस स्कोर को oom_adj_score कहा जाता है. इससे चल रही प्रोसेस को प्राथमिकता देने में मदद मिलती है. सबसे ज़्यादा स्कोर वाली प्रोसेस को पहले बंद किया जाता है. बैकग्राउंड में चल रहे ऐप्लिकेशन सबसे पहले बंद किए जाते हैं. इसके बाद, सिस्टम प्रोसेस बंद की जाती हैं. यहां दी गई टेबल में, एलएमके स्कोरिंग की कैटगरी को ज़्यादा से कम के क्रम में दिखाया गया है.
सबसे ज़्यादा स्कोर वाली कैटगरी के आइटम, पहली लाइन में सबसे पहले बंद किए जाते हैं:
मेमोरी प्रोफ़ाइलिंग टूल
यहां दिए गए टूल, मेमोरी से जुड़ी समस्याओं का पता लगाने और उनका विश्लेषण करने में आपकी मदद कर सकते हैं:
- देखें कि आपका ऐप्लिकेशन समय के साथ मेमोरी कैसे ऐलोकेट करता है. आपको रीयल-टाइम ग्राफ़ दिखेगा. इसमें पता चलेगा कि आपका ऐप्लिकेशन कितनी मेमोरी इस्तेमाल कर रहा है, कितने Java ऑब्जेक्ट असाइन किए गए हैं, और गार्बेज कलेक्शन कब होता है.
- ऐप्लिकेशन के चलने के दौरान, गार्बेज कलेक्शन इवेंट शुरू करें और Java हीप का स्नैपशॉट लें.
- अपने ऐप्लिकेशन के लिए मेमोरी के बंटवारे को रिकॉर्ड करें, असाइन किए गए सभी ऑब्जेक्ट की जांच करें, और हर बंटवारे के लिए स्टैक ट्रेस देखें.
अगर आपका गेम नेटिव इंजन पर चल रहा है, तो नेटिव मेमोरी के बंटवारे को डीबग करने के लिए, HWAddress Sanitizer का इस्तेमाल करें.
Android Studio मेमोरी प्रोफ़ाइलर
Android Studio, Android प्रोफ़ाइलर के कॉम्पोनेंट के तौर पर मेमोरी प्रोफ़ाइलर उपलब्ध कराता है. इससे आपको मेमोरी लीक और मेमोरी चर्न (मेमोरी का तेज़ी से कम होना) की पहचान करने में मदद मिलती है. इनकी वजह से, ऐप्लिकेशन रुक-रुककर चल सकता है, फ़्रीज़ हो सकता है, और क्रैश भी हो सकता है. प्रोफ़ाइलर, आपके ऐप्लिकेशन की मेमोरी के इस्तेमाल का रीयल-टाइम ग्राफ़ दिखाता है. साथ ही, आपको हीप डंप कैप्चर करने, गार्बेज कलेक्शन को ज़बरदस्ती लागू करने, और मेमोरी के बंटवारे को ट्रैक करने की सुविधा देता है.
Unity के मेमोरी प्रोफ़ाइलिंग टूल
अगर ऐप्लिकेशन बनाने के लिए Unity Engine का इस्तेमाल किया जा रहा है, तो Unity मेमोरी प्रोफ़ाइलिंग से जुड़े दिशा-निर्देश देखें. Unity में, आपके ऐप्लिकेशन में मेमोरी के इस्तेमाल का विश्लेषण करने के लिए, Unity दो टूल उपलब्ध कराता है.
पहला है मेमोरी प्रोफ़ाइलर मॉड्यूल. यह एक बिल्ट-इन प्रोफ़ाइलर है, जो आपको इस बारे में बुनियादी जानकारी देता है कि आपका ऐप्लिकेशन मेमोरी का इस्तेमाल कहां करता है.
दूसरा टूल है मेमोरी प्रोफ़ाइलर पैकेज. यह एक Unity पैकेज है, जिसे अपने प्रोजेक्ट में जोड़ा जा सकता है. यह पैकेज, Unity Editor में एक अतिरिक्त मेमोरी प्रोफ़ाइलर विंडो जोड़ता है. मेमोरी प्रोफ़ाइलर की मदद से, अपने ऐप्लिकेशन में मेमोरी के इस्तेमाल का ज़्यादा बारीकी से विश्लेषण किया जा सकता है. मेमोरी लीक का पता लगाने के लिए, स्नैपशॉट सेव किए जा सकते हैं और उनकी तुलना की जा सकती है. इसके अलावा, मेमोरी फ़्रैगमेंटेशन की समस्याओं का पता लगाने के लिए, मेमोरी लेआउट देखा जा सकता है.
Android के लिए Unity वर्कफ़्लो के बारे में जानने के लिए, Unity टूल की मदद से मेमोरी के इस्तेमाल की जांच करना, Unity में मेमोरी के इस्तेमाल को ऑप्टिमाइज़ करना, और Unity गेम के लिए एलएमके को डीबग करना देखें.
Unreal Engine में मेमोरी से जुड़ी अहम जानकारी
Unreal Engine से बनाए गए ऐप्लिकेशन, Unreal Memory Insights का इस्तेमाल करके, मेमोरी के बंटवारे और उसे खाली करने के बारे में ज़्यादा जानकारी देख सकते हैं. इसमें मेमोरी के ब्लॉक से जुड़े लो लेवल मेमोरी (एलएलएम) टैग और कॉलस्टैक शामिल हैं.
मेमोरी इनसाइट क्वेरी सिस्टम, किसी भी समय लाइव ऐलोकेशन का पता लगा सकता है. साथ ही, मेमोरी के इस्तेमाल में हुए बदलावों की पहचान कर सकता है, मेमोरी लीक का पता लगा सकता है, और कम समय के लिए किए गए ऐलोकेशन और लंबे समय के लिए किए गए ऐलोकेशन के बीच अंतर कर सकता है.
UE 5.4 से, Memory Insights में Android प्रोजेक्ट के लिए कॉलस्टैक के साथ मेमोरी ट्रेसिंग की सुविधा उपलब्ध है.
Android के लिए Unreal वर्कफ़्लो के बारे में जानने के लिए, Unreal की मदद से मेमोरी के इस्तेमाल की जांच करना और Unreal में मेमोरी के इस्तेमाल को ऑप्टिमाइज़ करना लेख पढ़ें.
कम मेमोरी के बारे में अहम जानकारी
Android, कॉलबैक और एपीआई उपलब्ध कराता है. इनकी मदद से, गेम में मेमोरी के इस्तेमाल को कम किया जा सकता है. साथ ही, यह पता लगाया जा सकता है कि गेम के पिछले रन क्यों बंद किए गए थे.
कॉलबैक
इस्तेमाल से बाहर हो चुके trim कॉलबैक के लिए रजिस्टर न करें. सिस्टम के मेमोरी वापस लेने से पहले, Android नेटिव मेमोरी प्रेशर इवेंट का पता लगाने के लिए एपीआई उपलब्ध नहीं कराता. साथ ही, रनिंग-मेमोरी ट्रिम कॉलबैक (TRIM_MEMORY_RUNNING_*) की सुविधा, कम मेमोरी की वजह से ऐप्लिकेशन बंद होने से रोकने में असरदार नहीं रही है.
इस वजह से, Android ने TRIM_MEMORY_UI_HIDDEN और TRIM_MEMORY_BACKGROUND को छोड़कर, सभी ट्रिम लेवल बंद कर दिए हैं. जब आपका गेम बैकग्राउंड में चला जाए, तो यूज़र इंटरफ़ेस (यूआई) और सहायक संसाधनों को रिलीज़ करने के लिए, इन बचे हुए कॉलबैक का इस्तेमाल करें. इसके अलावा, इंजन लाइफ़साइकल के बराबर के कॉलबैक का इस्तेमाल करें, जैसे कि Unity का OnApplicationPause और Unreal का ApplicationWillEnterBackgroundDelegate. लागू करने के बारे में ज़्यादा जानने के लिए, गेम में मेमोरी कम करना लेख पढ़ें.
गेम को बंद करना
Android, ऐप्लिकेशन और गेम को कैश मेमोरी में सेव करने के लिए, उपलब्ध मेमोरी का ज़्यादा से ज़्यादा इस्तेमाल करने की कोशिश करता है. इससे यह पक्का किया जाता है कि वे तेज़ी से लोड हों (उपयोगकर्ता अनुभव को बेहतर बनाना). हालांकि, मेमोरी कम होने पर सिस्टम, ज़्यादा मेमोरी इस्तेमाल करने वाले ऐप्लिकेशन और गेम को बंद कर देता है, ताकि डिवाइस को सामान्य तरीके से चलाने के लिए मेमोरी खाली की जा सके.
गेम के लिए मेमोरी के इस्तेमाल को बेहतर बनाने में मदद करने वाली जानकारी, अहम जानकारी, और सबसे सही तरीकों में ये शामिल हैं:
ApplicationExitInfoका इस्तेमाल करें: यह एपीआई, Android सिस्टम की ओर से पिछले गेम को बंद करने की वजह बताता है.ApplicationExitInfoका इस्तेमाल करके, कम मेमोरी (REASON_LOW_MEMORY) या मेमोरी लिमिटर टर्मिनेशन (REASON_MEMORY_LIMITER) की जांच करें. इससे आपको पिछली प्रोसेस के बंद होने की वजह पता चलेगी. ज़्यादा जानकारी के लिए, गेम के लिए ApplicationExitInfo देखें. यह देखना कि क्या मेमोरी की कमी की वजह से गेम बंद हो गया था. इससे गेम को ऑप्टिमाइज़ किया जा सकता है, ताकि वह उस डिवाइस पर कम मेमोरी का इस्तेमाल करे.- कुल फ़िज़िकल रैम देखें: फ़ोरग्राउंड में गेम बंद होने से रोकने और डिवाइस की क्षमताओं से मैच करने के लिए, हर डिवाइस की कुल फ़िज़िकल रैम देखें. इससे, गेम की मेमोरी के इस्तेमाल को अडजस्ट करने के लिए, ज़्यादा बारीकी से जानकारी मिलती है. अगर आपको ऐप्लिकेशन को बैकग्राउंड में ले जाने के तुरंत बाद बंद होने से रोकना है, ताकि खिलाड़ी एक साथ कई काम कर सके, तो गेम की मेमोरी के इस्तेमाल को कम करने के लिए, ट्रिम कॉलबैक (खास तौर पर
TRIM_MEMORY_UI_HIDDEN) का इस्तेमाल करें.
अन्य संसाधन
- गेम के लिए मेमोरी मैनेज करने के बारे में जानकारी
- गेम में मेमोरी के इस्तेमाल को मॉनिटर करने का तरीका
- गेम में मेमोरी का इस्तेमाल कम करने का तरीका
- मेमोरी मैनेज करने के बारे में खास जानकारी