আপনি কী মেমরি ক্যোয়ারী পেতে চান তা আপনার সংজ্ঞার উপর নির্ভর করে।
সাধারণত, আপনি হ্যাপ মেমরির স্থিতি জানতে চান, কারণ এটি যদি খুব বেশি মেমরি ব্যবহার করে তবে আপনি ওওএম পান এবং অ্যাপটি ক্র্যাশ করে।
এর জন্য, আপনি পরবর্তী মানগুলি পরীক্ষা করতে পারেন:
final Runtime runtime = Runtime.getRuntime();
final long usedMemInMB=(runtime.totalMemory() - runtime.freeMemory()) / 1048576L;
final long maxHeapSizeInMB=runtime.maxMemory() / 1048576L;
final long availHeapSizeInMB = maxHeapSizeInMB - usedMemInMB;
যত বেশি "ব্যবহৃত মেমআইএনএমবি" ভেরিয়েবল "ম্যাক্সহ্যাপসাইজআইএনএমবি" এর কাছাকাছি আসে ততই availHeapSizeInMB
শূন্যের কাছাকাছি যায় , আপনি ওওএমকে আরও কাছাকাছি পাবেন। (মেমরি খণ্ডিত হওয়ার কারণে আপনি এটি শূন্যে পৌঁছানোর আগে OOM পেতে পারেন))
এটি মেমরির ব্যবহারের ডিডিএমএস সরঞ্জামটি দেখায়।
বিকল্পভাবে, আসল র্যামের ব্যবহার রয়েছে যা পুরো সিস্টেমটি কতটা ব্যবহার করে - এটি গণনা করার জন্য গৃহীত উত্তর দেখুন ।
আপডেট: যেহেতু অ্যান্ড্রয়েড ও আপনার অ্যাপ্লিকেশনটি দেশীয় র্যামও তৈরি করে (কমপক্ষে বিটম্যাপস স্টোরেজের জন্য, যা সাধারণত বিশাল মেমরির ব্যবহারের মূল কারণ), এবং কেবল গাদা নয়, জিনিসগুলি পরিবর্তিত হয়েছে এবং আপনি কম OOM পান (কারণ এটি গাদাতে আর বিটম্যাপ থাকে না, এখানে চেক করুন ) তবে আপনার মেমরি ফুটো হওয়ার সন্দেহ থাকলে আপনার এখনও মেমরির ব্যবহারের দিকে নজর রাখা উচিত। অ্যান্ড্রয়েড ও তে, যদি আপনার মেমরি ফুটো থাকে যা পুরানো সংস্করণগুলিতে OOM এর কারণ হতে পারে তবে মনে হয় আপনি এটি ধরতে সক্ষম না হয়ে এটি ক্র্যাশ হয়ে যাবে। মেমরির ব্যবহারের জন্য কীভাবে চেক করবেন তা এখানে:
val nativeHeapSize = Debug.getNativeHeapSize()
val nativeHeapFreeSize = Debug.getNativeHeapFreeSize()
val usedMemInBytes = nativeHeapSize - nativeHeapFreeSize
val usedMemInPercentage = usedMemInBytes * 100 / nativeHeapSize
তবে আমি বিশ্বাস করি আইডিইর প্রোফাইলার ব্যবহার করা সবচেয়ে ভাল হতে পারে, যা গ্রাফ ব্যবহার করে রিয়েল টাইমে ডেটা দেখায়।
সুতরাং অ্যান্ড্রয়েড ও-তে সুসংবাদটি হ'ল অনেক বড় বিটম্যাপস সংরক্ষণের OOM এর কারণে ক্র্যাশ হওয়া অনেক বেশি শক্ত, তবে খারাপ খবরটি এটি আমি মনে করি না রানটাইম চলাকালীন এই জাতীয় ঘটনাটি ধরা সম্ভব।
সম্পাদনা: 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()
।