मेमोरी मैनेजमेंट के सबसे सही तरीके

इस दस्तावेज़ में यह माना गया है कि आपने Android ऐप्लिकेशन के लिए, मेमोरी मैनेजमेंट के सबसे सही तरीकों के दिशा-निर्देशों का पालन किया है. जैसे, अपने ऐप्लिकेशन की मेमोरी मैनेज करना.

परिचय

मेमोरी लीक, संसाधन लीक का एक टाइप है. यह तब होता है, जब कोई कंप्यूटर प्रोग्राम, ऐलोकेट की गई उस मेमोरी को रिलीज़ नहीं करता जिसकी अब ज़रूरत नहीं है. मेमोरी लीक होने पर, ऐप्लिकेशन ओएस से ज़्यादा मेमोरी का अनुरोध कर सकता है. इससे ऐप्लिकेशन क्रैश हो सकता है. गलत तरीके अपनाने से, Android ऐप्लिकेशन में मेमोरी लीक हो सकती है. जैसे, संसाधनों को सही तरीके से इस्तेमाल न करना या ज़रूरत न होने पर, लिसनर को अनरजिस्टर न करना.

इस दस्तावेज़ में, कोड में मेमोरी लीक को रोकने, उसका पता लगाने, और उसे ठीक करने के सबसे सही तरीके बताए गए हैं. अगर आपने इस दस्तावेज़ में दिए गए तरीकों को आज़मा लिया है और आपको लगता है कि हमारे एसडीके टूल में मेमोरी लीक हो रही है, तो Google के एसडीके टूल से जुड़ी समस्याओं की शिकायत करने का तरीका देखें.

सहायता टीम से संपर्क करने से पहले

Google की सहायता टीम को मेमोरी लीक की शिकायत करने से पहले, इस दस्तावेज़ में दिए गए सबसे सही तरीकों और डीबग करने के चरणों का पालन करें. इससे यह पक्का किया जा सकेगा कि गड़बड़ी आपके कोड में नहीं है. इन चरणों से आपकी समस्या हल हो सकती है. अगर ऐसा नहीं होता है, तो इससे वह जानकारी जनरेट होती है जिसकी मदद से Google की सहायता टीम आपकी मदद कर सकती है.

मेमोरी लीक को रोकना

Google SDK टूल का इस्तेमाल करने वाले कोड में, मेमोरी लीक होने की कुछ सामान्य वजहों से बचने के लिए, ये सबसे सही तरीके अपनाएं.

Android ऐप्लिकेशन के लिए सबसे सही तरीके

देख लें कि आपने अपने Android ऐप्लिकेशन में ये सभी चीज़ें कर ली हैं:

  1. इस्तेमाल नहीं किए जा रहे संसाधनों को रिलीज़ करें.
  2. ज़रूरत न होने पर, दर्शकों को अनरजिस्टर करना.
  3. ज़रूरत न होने पर टास्क रद्द करें.
  4. संसाधनों को रिलीज़ करने के लिए, लाइफ़साइकल के तरीके फ़ॉरवर्ड करें.
  5. SDK टूल के नए वर्शन का इस्तेमाल करना

इनमें से हर तरीके के बारे में खास जानकारी के लिए, नीचे दिए गए सेक्शन देखें.

इस्तेमाल नहीं किए जा रहे संसाधनों को रिलीज़ करना

जब आपका Android ऐप्लिकेशन किसी संसाधन का इस्तेमाल करता है, तो संसाधन की ज़रूरत न होने पर उसे रिलीज़ करना न भूलें. अगर आप ऐसा नहीं करते, तो संसाधन आपके ऐप्लिकेशन के साथ खत्म हो जाने के बाद भी मेमोरी का उपयोग करना जारी रखता है. ज़्यादा जानकारी के लिए, Android दस्तावेज़ में गतिविधि का लाइफ़साइकल देखें.

GeoSDKs में Google Maps के पुराने रेफ़रंस रिलीज़ करें

एक आम गलती यह है कि नेविगेशन व्यू या मैप व्यू का इस्तेमाल करके कैश मेमोरी में सेव किए जाने पर, Googleमैप से मेमोरी लीक हो सकती है. GoogleMap का, उस NavigationView या MapView से 1:1 संबंध होता है जिससे उसे वापस पाया जाता है. आपको यह पक्का करना होगा कि Google Maps को कैश मेमोरी में सेव न किया गया हो या फिर MapsView#onDestroy या MapView#onDestroy को कॉल करने पर रेफ़रंस रिलीज़ किया जाए. अगर इन व्यू को रैप करने के लिए, NavigationSupportFragment, MapSupportFragment या अपने फ़्रैगमेंट का इस्तेमाल किया जा रहा है, तो रेफ़रंस को Fragment#onDestroyView में रिलीज़ किया जाना चाहिए.

class NavFragment : SupportNavigationFragment() {

  var googleMap: GoogleMap?

  override fun onCreateView(
    inflater: LayoutInflater,
    parent: ViewGroup?,
    savedInstanceState: Bundle?,
  ): View  {
    super.onCreateView(inflater,parent,savedInstanceState)
    getMapAsync{map -> googleMap = map}
  }

  override fun onDestroyView() {
    googleMap = null
  }
}

जब ज़रूरत न हो, तब दर्शकों को अनरजिस्टर करना

जब आपका Android ऐप्लिकेशन किसी इवेंट के लिए लिसनर रजिस्टर करता है, जैसे कि बटन पर क्लिक करना या व्यू की स्थिति में बदलाव होना, तो लिसनर का रजिस्ट्रेशन रद्द ज़रूर करें. ऐसा तब करें, जब ऐप्लिकेशन को इवेंट को मॉनिटर करने की ज़रूरत न हो. ऐसा न करने पर, ऐप्लिकेशन के उनसे जुड़े होने के बाद भी, श्रोता मेमोरी का इस्तेमाल करते रहेंगे.

उदाहरण के लिए, मान लें कि आपका ऐप्लिकेशन Navigation SDK टूल का इस्तेमाल करता है और यह ऐप्लिकेशन, आर्टवर्क के पहुंचने की जानकारी देने वाले इवेंट को सुनने के लिए, यहां दिए गए लिसनर को कॉल करता है: अगर ऐप्लिकेशन, आर्टवर्क के पहुंचने की जानकारी देने वाले इवेंट को सुनने के लिए addArrivalListener का इस्तेमाल करता है, तो उसे आर्टवर्क के पहुंचने की जानकारी देने वाले इवेंट को मॉनिटर करने की ज़रूरत न होने पर, removeArrivalListener को भी कॉल करना चाहिए.

var arrivalListener: Navigator.ArrivalListener? = null

fun registerNavigationListeners() {
  arrivalListener =
    Navigator.ArrivalListener {
      ...
    }
  navigator.addArrivalListener(arrivalListener)
}

override fun onDestroy() {
  navView.onDestroy()
  if (arrivalListener != null) {
    navigator.removeArrivalListener(arrivalListener)
  }

  ...
  super.onDestroy()
}

ज़रूरत न होने पर टास्क रद्द करें

जब कोई Android ऐप्लिकेशन डाउनलोड या नेटवर्क अनुरोध जैसा कोई एसिंक्रोनस टास्क शुरू करता है, तो पक्का करें कि उसके पूरा होने पर आपने उसे रद्द कर दिया है. अगर टास्क को रद्द नहीं किया जाता है, तो वह ऐप्लिकेशन के पूरा हो जाने के बाद भी बैकग्राउंड में चलता रहेगा.

सबसे सही तरीकों के बारे में ज़्यादा जानने के लिए, Android दस्तावेज़ में अपने ऐप्लिकेशन की मेमोरी मैनेज करना देखें.

संसाधनों को रिलीज़ करने के लिए, लाइफ़साइकल के तरीके फ़ॉरवर्ड करना

अगर आपके ऐप्लिकेशन में नेविगेशन या Maps SDK टूल का इस्तेमाल किया जाता है, तो लाइफ़साइकल के तरीकों (बोल्ड में दिखाए गए) को navView पर फ़ॉरवर्ड करके, संसाधनों को ज़रूर रिलीज़ करें. नेविगेशन SDK में NavigationView का या Maps या नेविगेशन SDK में MapView का इस्तेमाल करके ऐसा किया जा सकता है. सीधे NavigationView और MapView का इस्तेमाल करने के बजाय, SupportNavigationFragment या SupportMapFragment का भी इस्तेमाल किया जा सकता है. सहायता फ़्रैगमेंट, लाइफ़साइकल के तरीकों को फ़ॉरवर्ड करते हैं.

class NavViewActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    ...
    navView = ...
    navView.onCreate(savedInstanceState)
    ...
  }

  override fun onSaveInstanceState(savedInstanceState: Bundle) {
    super.onSaveInstanceState(savedInstanceState)
    navView.onSaveInstanceState(savedInstanceState)
  }

  override fun onTrimMemory(level: Int) {
    super.onTrimMemory(level)
    navView.onTrimMemory(level)
  }

  /* Same with
    override fun onStart()
    override fun onResume()
    override fun onPause()
    override fun onConfigurationChanged(...)
    override fun onStop()
    override fun onDestroy()
  */
}

SDK टूल के सबसे नए वर्शन का इस्तेमाल करें

Google SDK टूल को लगातार अपडेट किया जाता है. इसमें नई सुविधाएं जोड़ी जाती हैं, गड़बड़ियां ठीक की जाती हैं, और परफ़ॉर्मेंस को बेहतर बनाया जाता है. ये सुधार पाने के लिए, अपने ऐप्लिकेशन में SDK टूल अप-टू-डेट रखें.

मेमोरी लीक को डीबग करना

अगर इस दस्तावेज़ में पहले दिए गए सभी लागू सुझावों को लागू करने के बाद भी, आपको मेमोरी लीक होने की सूचना दिखती है, तो डीबग करने के लिए यह तरीका अपनाएं.

शुरू करने से पहले, आपको यह पता होना चाहिए कि Android किस तरह मेमोरी को मैनेज करता है. जानकारी के लिए, Android मेमोरी मैनेजमेंट की खास जानकारी पढ़ें.

मेमोरी लीक को डीबग करने के लिए, यह तरीका अपनाएं:

  1. समस्या को फिर से दोहराएं. इसे डीबग करने के लिए, यह चरण ज़रूरी है.
  2. देखें कि मेमोरी का इस्तेमाल तय सीमा के मुताबिक है या नहीं. देखें कि क्या ज़्यादा इस्तेमाल, असल में आपके ऐप्लिकेशन को चलाने के लिए ज़रूरी मेमोरी है.
  3. हाई-लेवल पर डीबग करें. डीबग करने के लिए, कई तरह की सुविधाएं उपलब्ध हैं. Android में मेमोरी से जुड़ी समस्याओं को डीबग करने में, तीन अलग-अलग स्टैंडर्ड टूल सेट मदद करते हैं: Android Studio, Perfetto, और Android Debug Bridge (adb) कमांड लाइन की सुविधाएं.
  4. अपने ऐप्लिकेशन के मेमोरी इस्तेमाल की जानकारी देखें. ढेर का डंप और ऐलोकेशन ट्रैकिंग पाएं और फिर उसका विश्लेषण करें.
  5. मेमोरी लीक ठीक करें.

नीचे दिए गए सेक्शन में, इन चरणों के बारे में पूरी जानकारी दी गई है.

पहला चरण: समस्या को फिर से बनाना

अगर आप समस्या को फिर से नहीं बना पा रहे हैं, तो पहले उन स्थितियों पर विचार करें जिनकी वजह से मेमोरी लीक हो सकती है. अगर आपको पता है कि समस्या फिर से आ गई है, तो सीधे हेप डंप पर जाकर समस्या हल की जा सकती है. हालांकि, अगर आपको ऐप्लिकेशन शुरू होने पर या किसी दूसरे समय पर हीप डंप मिलता है, तो हो सकता है कि आपने लीक होने का खतरा पैदा करने वाली शर्तों को चालू न किया हो. समस्या को फिर से बनाने की कोशिश करते समय, अलग-अलग स्थितियों को ध्यान में रखें:

  • सुविधाओं का कौनसा सेट चालू है?

  • उपयोगकर्ता की कौनसी कार्रवाइयां, डेटा लीक को ट्रिगर करती हैं?

    • क्या आपने इस क्रम को चालू करने की कई बार कोशिश की है?
  • ऐप्लिकेशन ने लाइफ़साइकल की किन स्थितियों को पूरा किया है?

    • क्या आपने लाइफ़साइकल की अलग-अलग स्थितियों में कई बार कोशिश की है?

पक्का करें कि एसडीके के नए वर्शन में भी समस्या आ रही हो. ऐसा हो सकता है कि पिछले वर्शन की समस्या पहले ही ठीक हो गई हो.

दूसरा चरण: देखें कि ऐप्लिकेशन के लिए मेमोरी का इस्तेमाल तय सीमा के मुताबिक है या नहीं

हर सुविधा के लिए अतिरिक्त मेमोरी की ज़रूरत होती है. अलग-अलग स्थितियों को डीबग करते समय, इस बात का ध्यान रखें कि क्या यह उम्मीद के मुताबिक इस्तेमाल है या यह असल में मेमोरी लीक है. उदाहरण के लिए, अलग-अलग सुविधाओं या उपयोगकर्ता के टास्क के लिए, इन संभावनाओं पर विचार करें:

  • लीक होने की संभावना: एक से ज़्यादा बार-बार दोहराने की सुविधा की मदद से स्थिति को चालू करने से, समय के साथ मेमोरी का इस्तेमाल बढ़ता है.

  • मेमोरी के इस्तेमाल की अनुमानित सीमा: स्थिति बंद होने के बाद, मेमोरी वापस ले ली जाती है.

  • मेमोरी के इस्तेमाल की अनुमानित सीमा: मेमोरी का इस्तेमाल कुछ समय के लिए बढ़ता है और फिर कम हो जाता है. ऐसा, सीमित कैश मेमोरी या मेमोरी के इस्तेमाल की अनुमानित सीमा की वजह से हो सकता है.

अगर ऐप्लिकेशन की परफ़ॉर्मेंस में मेमोरी के इस्तेमाल में कोई बदलाव नहीं हुआ है, तो ऐप्लिकेशन की मेमोरी मैनेज करके इस समस्या को ठीक किया जा सकता है. मदद पाने के लिए, अपने ऐप्लिकेशन की मेमोरी मैनेज करना लेख पढ़ें.

तीसरा चरण: हाई लेवल पर डीबग करना

मेमोरी लीक को डीबग करते समय, सबसे ऊपर से शुरू करें. इसके बाद, जब आपको समस्या का पता चल जाए, तो ड्रिल-डाउन करें. सबसे पहले, इनमें से किसी एक हाई-लेवल डिबगिंग टूल का इस्तेमाल करके, यह विश्लेषण करें कि समय के साथ कोई लीक तो नहीं हुआ है:

Android Studio का मेमोरी प्रोफ़ाइलर

इस टूल से, आपको खर्च की गई मेमोरी का विज़ुअल हिस्टोग्राम दिखता है. इसी इंटरफ़ेस से ही, हेप डंप और ऐलोकेशन ट्रैकिंग को भी ट्रिगर किया जा सकता है. यह टूल डिफ़ॉल्ट सुझाव है. ज़्यादा जानकारी के लिए, Android Studio का मेमोरी प्रोफ़ाइलर सेक्शन देखें.

Perfetto Memory Counters

Perfetto की मदद से, कई मेट्रिक को ट्रैक करने के साथ-साथ, उन्हें एक ही हिस्टोग्राम में दिखाया जा सकता है. ज़्यादा जानकारी के लिए, Perfetto मेमोरी काउंटर देखें.

Perfetto का यूज़र इंटरफ़ेस

Android डीबग ब्रिज (adb) कमांड-लाइन की सुविधाएं

Perfetto की मदद से ट्रैक की जा सकने वाली ज़्यादातर चीज़ों को, adb कमांड लाइन सुविधा के तौर पर भी उपलब्ध कराया जा सकता है. इसकी मदद से सीधे क्वेरी की जा सकती है. कुछ अहम उदाहरण यहां दिए गए हैं:

  • Meminfo की मदद से, किसी भी समय मेमोरी की पूरी जानकारी देखी जा सकती है.

  • Procstats, समय के साथ इकट्ठा किए गए कुछ अहम आंकड़े दिखाता है.

इस बारे में जानने के लिए एक ज़रूरी आंकड़ा यह है कि ऐप्लिकेशन को समय के साथ, ज़्यादा से ज़्यादा फ़िज़िकल मेमोरी फ़ुटप्रिंट (maxRSS) की ज़रूरत होती है. ऐसा हो सकता है कि MaxPSS उतना सटीक न हो. ज़्यादा सटीक जानकारी के लिए, adb shell dumpsys procstats --help –start-testing फ़्लैग देखें.

ऐलोकेशन ट्रैकिंग

ऐलोकेशन ट्रैकिंग, स्टैक ट्रेस की पहचान करती है जहां मेमोरी को ऐलोकेट किया गया था और अगर उसे खाली नहीं किया गया था. यह चरण, नेटिव कोड में लीक का पता लगाने के लिए खास तौर पर मददगार होता है. इस टूल से स्टैक ट्रेस की पहचान की जाती है. इसलिए, यह समस्या की मुख्य वजह को तुरंत डीबग करने या समस्या को फिर से बनाने का तरीका जानने का एक बेहतरीन तरीका हो सकता है. ऐलोकेशन ट्रैकिंग का इस्तेमाल करने का तरीका जानने के लिए, एलोकेशन ट्रैकिंग की मदद से नेटिव कोड में मेमोरी डीबग करना देखें.

चौथा चरण: हीप डंप की मदद से, अपने ऐप्लिकेशन के मेमोरी इस्तेमाल की जांच करना

मेमोरी लीक का पता लगाने का एक तरीका यह है कि अपने ऐप्लिकेशन का हीप डंप पाएं और फिर उसमें लीक की जांच करें. हीप डंप, ऐप्लिकेशन की मेमोरी में मौजूद सभी ऑब्जेक्ट का स्नैपशॉट होता है. इसका इस्तेमाल, मेमोरी लीक और मेमोरी से जुड़ी अन्य समस्याओं का पता लगाने के लिए किया जा सकता है.

Android Studio, मेमोरी लीक का पता लगा सकता है, जिसे जीसी ठीक नहीं कर सकता. हीप डंप को कैप्चर करने पर, Android Studio यह जांच करता है कि क्या कोई ऐसी गतिविधि या फ़्रैगमेंट है जिसे अब भी ऐक्सेस किया जा सकता है, लेकिन उसे पहले ही खत्म कर दिया गया है.

  1. हीप डंप कैप्चर करना.
  2. मेमोरी लीक का पता लगाने के लिए हीप डंप का विश्लेषण करें.
  3. मेमोरी लीक ठीक करना.

ज़्यादा जानकारी के लिए, नीचे दिए गए सेक्शन देखें.

हीप डंप को कैप्चर करें

हीप डंप कैप्चर करने के लिए, Android डीबग ब्रिज (adb) या Android Studio के मेमोरी प्रोफ़ाइलर का इस्तेमाल किया जा सकता है.

हीप डंप को कैप्चर करने के लिए adb का इस्तेमाल करना

adb का इस्तेमाल करके, हेप डंप कैप्चर करने के लिए यह तरीका अपनाएं:

  1. अपने Android डिवाइस को कंप्यूटर से कनेक्ट करें.
  2. कोई कमांड प्रॉम्प्ट खोलें और उस डायरेक्ट्री पर जाएं जहां adb टूल मौजूद हैं.
  3. हीप डंप को कैप्चर करने के लिए, इस निर्देश को चलाएं :

    adb shell am dumpheap my.app.name $PHONE_FILE_OUT

  4. हीप डंप को वापस पाने के लिए, इस निर्देश को चलाएं:

    adb pull $PHONE_FILE_OUT $LOCAL_FILE.

हीप डंप को कैप्चर करने के लिए Android Studio का इस्तेमाल करना

Android Studio के मेमोरी प्रोफ़ाइलर का इस्तेमाल करके हीप डंप कैप्चर करने के लिए, Android के हीप डंप कैप्चर करें सेक्शन में यह तरीका अपनाएं.

मेमोरी लीक का पता लगाने के लिए, हीप डंप का विश्लेषण करना

हीप डंप कैप्चर करने के बाद, उसका विश्लेषण करने के लिए Android Studio के मेमोरी प्रोफ़ाइलर का इस्तेमाल किया जा सकता है. ऐसा करने के लिए, यह तरीका अपनाएं:

  1. Android Studio में अपना Android प्रोजेक्ट खोलें.

  2. रन करें को चुनें. इसके बाद, डीबग करें कॉन्फ़िगरेशन चुनें.

  3. Android प्रोफ़ाइलर टैब खोलें.

  4. मेमोरी चुनें.

  5. हैप डंप खोलें को चुनें और जनरेट की गई हैप डंप फ़ाइल चुनें. मेमोरी प्रोफ़ाइलर, आपके ऐप्लिकेशन के मेमोरी के इस्तेमाल का ग्राफ़ दिखाता है.

  6. हीप डंप का विश्लेषण करने के लिए ग्राफ़ का इस्तेमाल करें:

    • उन ऑब्जेक्ट की पहचान करना जिनका अब इस्तेमाल नहीं किया जा रहा है.

    • उन ऑब्जेक्ट की पहचान करना जो ज़्यादा मेमोरी का इस्तेमाल करते हैं.

    • देखें कि हर ऑब्जेक्ट कितनी मेमोरी का इस्तेमाल कर रहा है.

  7. इस जानकारी का इस्तेमाल करके, मेमोरी लीक के सोर्स का पता लगाएं या उसे कम करें और उसे ठीक करें.

पांचवां चरण: मेमोरी लीक होने की समस्या को ठीक करना

मेमोरी लीक के सोर्स की पहचान करने के बाद, उसे ठीक किया जा सकता है. अपने Android ऐप्लिकेशन में मेमोरी लीक की समस्या को ठीक करने से, ऐप्लिकेशन की परफ़ॉर्मेंस और स्थिरता को बेहतर बनाने में मदद मिलती है. स्थिति के हिसाब से, जानकारी अलग-अलग होती है. हालांकि, इन सुझावों से मदद मिल सकती है:

डीबग करने के अन्य टूल

अगर इन चरणों को पूरा करने के बाद भी, आपको मेमोरी लीक का पता नहीं चलता और न ही उसे ठीक किया जा सकता है, तो ये टूल आज़माएं:

ऐलोकेशन ट्रैकिंग की मदद से, नेटिव कोड में मेमोरी को डीबग करना

भले ही, सीधे तौर पर नेटिव कोड का इस्तेमाल न किया जा रहा हो, लेकिन कई सामान्य Android लाइब्रेरी ऐसा करती हैं. इनमें Google SDK टूल भी शामिल हैं. अगर आपको लगता है कि मेमोरी लीक, नेटिव कोड में है, तो इसे डीबग करने के लिए कई टूल उपलब्ध हैं. Android Studio या heapprofd (Perfetto के साथ भी काम करता है) की मदद से, ऐलोकेशन ट्रैकिंग करना, मेमोरी लीक की संभावित वजहों की पहचान करने का एक बेहतरीन तरीका है. साथ ही, आम तौर पर यह डीबग करने का सबसे तेज़ तरीका भी है.

ऐलोकेशन ट्रैकिंग का एक खास फ़ायदा यह भी है कि आप किसी स्टैक में मिल सकने वाली संवेदनशील जानकारी को शामिल किए बिना, नतीजे शेयर कर सकते हैं.

LeakCanary की मदद से लीक हुए डेटा की पहचान करें

LeakCanary, Android ऐप्लिकेशन में मेमोरी लीक की पहचान करने वाला एक बेहतरीन टूल है. अपने ऐप्लिकेशन में LeakCanary का इस्तेमाल करने के तरीके के बारे में ज़्यादा जानने के लिए, LeakCanary पर जाएं.

Google SDK टूल से जुड़ी समस्याओं की शिकायत करने का तरीका

अगर आपने इस दस्तावेज़ में दिए गए तरीकों को आज़मा लिया है और आपको लगता है कि हमारे SDK में मेमोरी लीक हो रही है, तो ग्राहक सहायता टीम से संपर्क करें. साथ ही, नीचे दी गई ज़्यादा से ज़्यादा जानकारी दें:

  • मेमोरी लीक की समस्या को फिर से बनाने का तरीका. अगर चरणों के लिए जटिल कोडिंग की ज़रूरत है, तो हमारे सैंपल ऐप्लिकेशन में समस्या को दोहराने वाले कोड को कॉपी करें. साथ ही, यूज़र इंटरफ़ेस (यूआई) में लीक को ट्रिगर करने के लिए, ज़रूरी अन्य चरणों की जानकारी दें.

  • आपके ऐप्लिकेशन से कैप्चर किए गए हीप डंप, जिनमें समस्या फिर से बनाई गई है. समय के दो अलग-अलग पॉइंट पर हेप डंप कैप्चर करें, जिनसे पता चलता हो कि मेमोरी के इस्तेमाल में काफ़ी बढ़ोतरी हुई है.

  • अगर नेटिव मेमोरी लीक होने की आशंका है, तो heapprofd से एलोकेशन ट्रैकिंग आउटपुट शेयर करें.

  • गड़बड़ी की रिपोर्ट, जो लीक की स्थिति को फिर से बनाने के बाद ली गई हो.

  • मेमोरी से जुड़े किसी भी क्रैश के स्टैक ट्रेस.

    अहम जानकारी: आम तौर पर, स्टैक ट्रेस से मेमोरी से जुड़ी समस्या को डीबग करने में मदद नहीं मिलती. इसलिए, पक्का करें कि आपने जानकारी के किसी अन्य फ़ॉर्म का भी इस्तेमाल किया हो.