अगर नेटिव कोड लिखते समय आपको उसकी मेमोरी खपत की चिंता है, तो अपने ऐप्लिकेशन के नेटिव ऐलोकेशन की प्रोफ़ाइल बनाएं. इससे, आपको यह पता चलेगा कि उसे ऑप्टिमाइज़ किया जा सकता है या नहीं.
आपको अपने ऐप्लिकेशन की मेमोरी की प्रोफ़ाइल क्यों बनानी चाहिए
Android, मैनेज की गई मेमोरी का एक माहौल उपलब्ध कराता है. जब Android यह पता लगाता है कि आपका ऐप्लिकेशन अब कुछ ऑब्जेक्ट का इस्तेमाल नहीं कर रहा है, तो गै़रबेज कलेक्टर, इस्तेमाल नहीं की गई मेमोरी को ढेर में वापस छोड़ देता है. Android, इस्तेमाल नहीं की जा रही मेमोरी को ढूंढने के तरीके को लगातार बेहतर बना रहा है. हालांकि, Android के सभी वर्शन पर किसी समय, सिस्टम को आपके कोड को कुछ समय के लिए रोकना पड़ता है. ज़्यादातर समय, वीडियो में रुकावट का पता नहीं चलता. हालांकि, अगर आपका ऐप्लिकेशन, सिस्टम से ज़्यादा तेज़ी से मेमोरी ऐलोकेट करता है, तो हो सकता है कि आपके ऐप्लिकेशन को कुछ समय तक इंतज़ार करना पड़े. ऐसा तब होता है, जब कलेक्टर आपके ऐलोकेशन को पूरा करने के लिए ज़रूरत के मुताबिक मेमोरी खाली करता है. देरी की वजह से, आपके ऐप्लिकेशन में फ़्रेम स्किप हो सकते हैं और ऐप्लिकेशन के काम करने में ज़्यादा समय लग सकता है.
प्रोग्रामिंग के उन तरीकों के बारे में जानने के लिए जिनसे आपके ऐप्लिकेशन के लिए मेमोरी का इस्तेमाल कम किया जा सकता है, अपने ऐप्लिकेशन की मेमोरी मैनेज करना लेख पढ़ें.
नेटिव ऐलोकेशन की खास जानकारी
मेमोरी खर्च को ट्रैक करें (नेटिव एलोकेशन) टास्क को चलाने पर, Android Studio प्रोफ़ाइलर आपके तय किए गए समय के लिए, नेटिव कोड में ऑब्जेक्ट के एलोकेशन और डी-एलोकेशन को ट्रैक करता है. साथ ही, यह जानकारी देता है:
- अलोकेशन: चुनी गई समयावधि के दौरान,
malloc()
याnew
ऑपरेटर का इस्तेमाल करके, एलोकेट किए गए ऑब्जेक्ट की संख्या. - Deallocations: चुनी गई समयावधि के दौरान,
free()
याdelete
ऑपरेटर का इस्तेमाल करके, डिसकेल किए गए ऑब्जेक्ट की संख्या. - बंटवारे का साइज़: चुनी गई समयावधि के दौरान, सभी बंटवारों का कुल साइज़ बाइट में.
- Deallocations का साइज़: चुनी गई समयावधि के दौरान, खाली की गई सभी मेमोरी का कुल साइज़, बाइट में.
- कुल संख्या: बंटवारे कॉलम की वैल्यू में से डील के बंटवारे कॉलम की वैल्यू घटाने पर मिलने वाली वैल्यू.
- बचे हुए साइज़: बंटवारे का साइज़ कॉलम में मौजूद वैल्यू में से डीलॉकेशन का साइज़ कॉलम में मौजूद वैल्यू को घटाने पर, बची हुई वैल्यू मिलती है.
विज़ुअलाइज़ेशन टैब, चुनी गई समयावधि के दौरान कॉल स्टैक में, नेटिव कोड से जुड़े सभी ऑब्जेक्ट का एक साथ दिखने वाला व्यू दिखाता है. इससे आपको यह पता चलता है कि दिखाए गए इंस्टेंस के साथ कॉलस्टैक में कुल कितनी मेमोरी लगती है. पहली लाइन में थ्रेड का नाम दिखता है. डिफ़ॉल्ट रूप से, ऑब्जेक्ट को ऐलोकेशन साइज़ के आधार पर, बाईं से दाईं ओर स्टैक किया जाता है. क्रम बदलने के लिए, ड्रॉप-डाउन का इस्तेमाल करें.
डिफ़ॉल्ट रूप से, प्रोफ़ाइलर 2048 बाइट के सैंपल साइज़ का इस्तेमाल करता है: हर बार 2048 बाइट की मेमोरी को ऐलोकेट करने पर, मेमोरी का स्नैपशॉट लिया जाता है. सैंपल साइज़ छोटा होने पर, ज़्यादा बार स्नैपशॉट लिए जाते हैं. इससे, मेमोरी के इस्तेमाल के बारे में ज़्यादा सटीक डेटा मिलता है. सैंपल साइज़ बड़ा होने पर, डेटा कम सटीक होता है. हालांकि, इससे सिस्टम के रिसॉर्स कम खर्च होते हैं और रिकॉर्डिंग के दौरान परफ़ॉर्मेंस बेहतर होती है. सैंपल साइज़ बदलने के लिए, रिकॉर्डिंग कॉन्फ़िगरेशन में बदलाव करना लेख पढ़ें.