यह आपकी परिभाषा पर निर्भर करता है कि आप किस मेमोरी क्वेरी को प्राप्त करना चाहते हैं।
आमतौर पर, आप हीप मेमोरी की स्थिति जानना चाहते हैं, क्योंकि यदि यह बहुत अधिक मेमोरी का उपयोग करता है, तो आपको OOM मिलता है और ऐप को क्रैश कर देता है।
इसके लिए, आप अगले मान देख सकते हैं:
final Runtime runtime = Runtime.getRuntime();
final long usedMemInMB=(runtime.totalMemory() - runtime.freeMemory()) / 1048576L;
final long maxHeapSizeInMB=runtime.maxMemory() / 1048576L;
final long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB;
जितना अधिक "usedMemInMB" वैरिएबल "maxHeapSizeInMB" के करीब availHeapSizeInMB
जाता है , उतना ही शून्य हो जाता है , उतना ही करीब आपको OOM मिलता है। (स्मृति विखंडन के कारण, आपको OOM पहले यह शून्य तक पहुँच सकता है।)
स्मृति उपयोग का DDMS उपकरण भी यही दर्शाता है।
वैकल्पिक रूप से, वास्तविक रैम का उपयोग होता है, जो कि पूरे सिस्टम का कितना उपयोग करता है - इसकी गणना करने के लिए स्वीकृत उत्तर देखें ।
अपडेट: चूंकि एंड्रॉइड ओ आपके ऐप को देशी रैम का उपयोग करता है (कम से कम बिटमैप्स स्टोरेज के लिए, जो आमतौर पर विशाल मेमोरी उपयोग का मुख्य कारण है), और न केवल ढेर, चीजें बदल गई हैं, और आपको कम ओओएम मिलता है (क्योंकि हीप में अब बिटमैप्स नहीं हैं, यहाँ देखें ), लेकिन आपको मेमोरी के उपयोग पर नज़र रखनी चाहिए अगर आपको संदेह है कि आपके पास मेमोरी लीक है। एंड्रॉइड ओ पर, यदि आपके पास मेमोरी लीक है जो पुराने संस्करणों पर ओओएम का कारण होना चाहिए था, तो ऐसा लगता है कि यह बस आप को पकड़ने में सक्षम होने के बिना क्रैश हो जाएगा। स्मृति उपयोग के लिए जाँच कैसे करें:
val nativeHeapSize = Debug.getNativeHeapSize()
val nativeHeapFreeSize = Debug.getNativeHeapFreeSize()
val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize
val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize
लेकिन मेरा मानना है कि आईडीई के प्रोफाइलर का उपयोग करना सबसे अच्छा हो सकता है, जो ग्राफ का उपयोग करके वास्तविक समय में डेटा दिखाता है।
तो एंड्रॉइड ओ पर अच्छी खबर यह है कि कई बड़े बिटमैप को संग्रहीत करने के ओओएम के कारण क्रैश होने के लिए बहुत मुश्किल है, लेकिन बुरी खबर यह है कि मुझे नहीं लगता कि रनटाइम के दौरान इस तरह के मामले को पकड़ना संभव है।
EDIT: Debug.getNativeHeapSize()
समय के साथ बदलाव दिखता है , क्योंकि यह आपको आपके ऐप की कुल अधिकतम मेमोरी दिखाता है। तो उन कार्यों का उपयोग केवल प्रोफाइलर के लिए किया जाता है, यह दिखाने के लिए कि आपका ऐप कितना उपयोग कर रहा है।
यदि आप वास्तविक कुल और उपलब्ध देशी रैम प्राप्त करना चाहते हैं, तो इसका उपयोग करें:
val memoryInfo = ActivityManager.MemoryInfo()
(getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager).getMemoryInfo(memoryInfo)
val nativeHeapSize = memoryInfo.totalMem
val nativeHeapFreeSize = memoryInfo.availMem
val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize
val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize
Log.d("AppLog", "total:${Formatter.formatFileSize(this, nativeHeapSize)} " +
"free:${Formatter.formatFileSize(this, nativeHeapFreeSize)} " +
"used:${Formatter.formatFileSize(this, usedMemInBytes)} ($usedMemInPercentage%)")
Debug.getNativeHeapFreeSize()
।