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