میزان استفاده از حافظه (RSS ناشناس + swap) معیاری است که میزان استفاده از حافظه توسط برنامه شما را نشان میدهد.
حافظه ناشناس ، حافظهای است که توسط فایلی در حافظه پشتیبانی نمیشود، مانند تخصیصهای هیپ و حافظه تخصیصیافته توسط mmap. این حافظه، تخصیصهای حافظه پویای برنامه شما، از جمله هیپ جاوا یا کاتلین، تخصیصهای هیپ بومی مدیریتنشده (جایی که دادههای پیکسلی بیتمپ در اندروید ۸.۰ (سطح API ۲۶) و بالاتر وجود دارد) و پشتههای اجرای نخ را ثبت میکند. در حالی که سیستم عامل میتواند حافظه فایل-پشتیبانیشده را تحت فشار رها کند، نمیتواند حافظه ناشناس را رها کند.
اندازه مجموعه مقیم (RSS) تعداد کل صفحات حافظه (اعم از مشترک و غیر مشترک) است که توسط یک فرآیند که در RAM فیزیکی نگهداری میشوند، استفاده میشود. یک صفحه در صورتی «مشترک» در نظر گرفته میشود که توسط بیش از یک فرآیند (مانند برنامههایی که به یک کتابخانه دسترسی دارند) مورد دسترسی قرار گیرد.
برای حافظه ناشناس، سیستم میتواند وقتی حافظه تحت فشار است، صفحاتی را در فضای swap (یا zRAM در اندروید) بنویسد. سیستم میتواند در صورت نیاز این صفحات را از swap بخواند.
در مجموع، میزان استفاده از حافظه (RSS ناشناس + swap) معیاری از تعداد کل صفحات حافظه برنامه شما است که توسط فایلی در فضای ذخیرهسازی پشتیبانی نمیشوند، از جمله هر حافظهای که توسط سیستم در swap نیز حفظ میشود. ردیابی RSS ناشناس + swap تضمین میکند که ردپای واقعی و غیرقابل حذف حافظه برنامه خود را ببینید.
اگر میزان مصرف حافظه برنامه شما زیاد است، بیشتر بررسی کنید و با استفاده از راهنماییهای این صفحه، مشکل را برطرف کنید.
منابع
تشخیص استفاده بیش از حد از حافظه به صورت محلی
برای شروع تشخیص منبع استفاده بیش از حد از حافظه، میتوانید با استفاده از دستور Record heap dump در تنظیمات توسعهدهندگان، اندروید استودیو یا Perfetto ، یک heap dump را ثبت کنید. توصیه میکنیم پس از آزمایش سفرهای کاربری اصلی برنامه خود، با ثبت heap dump به صورت محلی شروع کنید.
ما به ویژه توصیه میکنیم مسیرهای کاربری زیر را آزمایش کنید:
- وب ویوها و جلسات مرورگر درون برنامهای
- پیمایش بینهایت پر از رسانه
- جریانهای ایجاد و ویرایش دارایی
برای بررسی نشت حافظه احتمالی، user journey های مربوطه را به صورت محلی اجرا کنید و heap dump ها را در حالتهای مختلف فرآیند (قابل مشاهده، سرویس پیشزمینه و ذخیره شده) جمعآوری کنید تا بررسی کنید که آیا برنامه پس از قرار گرفتن در پسزمینه، حافظه را آزاد میکند یا خیر. برای درک چگونگی ارتباط این حالتهای فرآیند با فراخوانیهای onTrimMemory ، به راهنمای آزادسازی حافظه در پاسخ به رویدادها مراجعه کنید.
اگر با استفاده از Android Studio Profiler در حال اشکالزدایی مشکلات حافظه هستید، میتوانید از ادغام LeakCanary نیز برای سادهسازی تشخیص نشت و تکرار بیتمپ استفاده کنید تا استفاده از تصویر خود را بهینه کنید .
پس از جمعآوری دادههای هیپ، توصیه میکنیم از مهارت پروفایلر اندروید برای تجزیه و تحلیل هیپ و شناسایی منابع بالقوهی مصرف بالای حافظه استفاده کنید.
مهارتهای اندروید
مشاهده در گیتهاب پروفایلر اندروید
android skills add android-profiler
در اینجا مثالی از آنچه مهارتهای هوش مصنوعی میتوانند پاسخ دهند، آورده شده است:
I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
Summary of Findings
The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
1. [Library] Image Cache Optimization:
* Review the [Library] caching strategy. Ensure that bitmaps
loaded for animations are released or downsampled when the animation is
not in the foreground.
2. Asset Resolution Audit:
* The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
3. View Lifecycle Management:
* Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
tab are properly detached or their animations are cleared when switching between tabs.
4. Fix Surface Leaks:
* Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
native resource exhaustion.
منابع اضافی برای تفسیر دادههای هیپ دامپ
منابع زیر اطلاعات بیشتری در مورد تفسیر دادههای هیپ و اشکالزدایی میزان استفاده از حافظه ارائه میدهند:
- تحلیل دستی: از راهنمای Perfetto Heap Dump Explorer برای یادگیری نحوه پیمایش و تفسیر تجسمهای هیپ دامپ در رابط کاربری Perfetto استفاده کنید.
- تخصیصهای جاوا/کاتلین: برای آشنایی گام به گام با تحلیل دادههای هیپ زمان اجرای اندروید (ART) ، بخش «تصویرسازی اولین هیپ دامپ ART» را مطالعه کنید.
- تخصیصهای بومی: برای یادگیری نحوه جمعآوری و تحلیل پروفایلهای حافظه بومی (C/C++) به مستندات Perfetto Native Profiling مراجعه کنید.
- بازرسی رابط خط فرمان (CLI): از adb dumpsys meminfo برای دریافت خلاصهای سریع از میزان استفاده از حافظه برنامه خود در دستگاه استفاده کنید.
بهبود استفاده از حافظه
برای کسب اطلاعات بیشتر در مورد بهبود استفاده از حافظه برنامه خود، به این بخشها مراجعه کنید:
- کاهش حجم کد و منابع برنامه شما
- نظارت بر حافظه موجود و میزان استفاده از حافظه
- از ساختارهای کد با بهرهوری بیشتر در حافظه استفاده کنید
برای راهنمایی دقیق در مورد رفع مشکلات حافظه، به راهنمای مدیریت حافظه برنامه خود مراجعه کنید.
،میزان استفاده از حافظه (RSS ناشناس + swap) معیاری است که میزان استفاده از حافظه توسط برنامه شما را نشان میدهد.
حافظه ناشناس ، حافظهای است که توسط فایلی در حافظه پشتیبانی نمیشود، مانند تخصیصهای هیپ و حافظه تخصیصیافته توسط mmap. این حافظه، تخصیصهای حافظه پویای برنامه شما، از جمله هیپ جاوا یا کاتلین، تخصیصهای هیپ بومی مدیریتنشده (جایی که دادههای پیکسلی بیتمپ در اندروید ۸.۰ (سطح API ۲۶) و بالاتر وجود دارد) و پشتههای اجرای نخ را ثبت میکند. در حالی که سیستم عامل میتواند حافظه فایل-پشتیبانیشده را تحت فشار رها کند، نمیتواند حافظه ناشناس را رها کند.
اندازه مجموعه مقیم (RSS) تعداد کل صفحات حافظه (اعم از مشترک و غیر مشترک) است که توسط یک فرآیند که در RAM فیزیکی نگهداری میشوند، استفاده میشود. یک صفحه در صورتی «مشترک» در نظر گرفته میشود که توسط بیش از یک فرآیند (مانند برنامههایی که به یک کتابخانه دسترسی دارند) مورد دسترسی قرار گیرد.
برای حافظه ناشناس، سیستم میتواند وقتی حافظه تحت فشار است، صفحاتی را در فضای swap (یا zRAM در اندروید) بنویسد. سیستم میتواند در صورت نیاز این صفحات را از swap بخواند.
در مجموع، میزان استفاده از حافظه (RSS ناشناس + swap) معیاری از تعداد کل صفحات حافظه برنامه شما است که توسط فایلی در فضای ذخیرهسازی پشتیبانی نمیشوند، از جمله هر حافظهای که توسط سیستم در swap نیز حفظ میشود. ردیابی RSS ناشناس + swap تضمین میکند که ردپای واقعی و غیرقابل حذف حافظه برنامه خود را ببینید.
اگر میزان مصرف حافظه برنامه شما زیاد است، بیشتر بررسی کنید و با استفاده از راهنماییهای این صفحه، مشکل را برطرف کنید.
منابع
تشخیص استفاده بیش از حد از حافظه به صورت محلی
برای شروع تشخیص منبع استفاده بیش از حد از حافظه، میتوانید با استفاده از دستور Record heap dump در تنظیمات توسعهدهندگان، اندروید استودیو یا Perfetto ، یک heap dump را ثبت کنید. توصیه میکنیم پس از آزمایش سفرهای کاربری اصلی برنامه خود، با ثبت heap dump به صورت محلی شروع کنید.
ما به ویژه توصیه میکنیم مسیرهای کاربری زیر را آزمایش کنید:
- وب ویوها و جلسات مرورگر درون برنامهای
- پیمایش بینهایت پر از رسانه
- جریانهای ایجاد و ویرایش دارایی
برای بررسی نشت حافظه احتمالی، user journey های مربوطه را به صورت محلی اجرا کنید و heap dump ها را در حالتهای مختلف فرآیند (قابل مشاهده، سرویس پیشزمینه و ذخیره شده) جمعآوری کنید تا بررسی کنید که آیا برنامه پس از قرار گرفتن در پسزمینه، حافظه را آزاد میکند یا خیر. برای درک چگونگی ارتباط این حالتهای فرآیند با فراخوانیهای onTrimMemory ، به راهنمای آزادسازی حافظه در پاسخ به رویدادها مراجعه کنید.
اگر با استفاده از Android Studio Profiler در حال اشکالزدایی مشکلات حافظه هستید، میتوانید از ادغام LeakCanary نیز برای سادهسازی تشخیص نشت و تکرار بیتمپ استفاده کنید تا استفاده از تصویر خود را بهینه کنید .
پس از جمعآوری دادههای هیپ، توصیه میکنیم از مهارت پروفایلر اندروید برای تجزیه و تحلیل هیپ و شناسایی منابع بالقوهی مصرف بالای حافظه استفاده کنید.
مهارتهای اندروید
مشاهده در گیتهاب پروفایلر اندروید
android skills add android-profiler
در اینجا مثالی از آنچه مهارتهای هوش مصنوعی میتوانند پاسخ دهند، آورده شده است:
I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
Summary of Findings
The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
1. [Library] Image Cache Optimization:
* Review the [Library] caching strategy. Ensure that bitmaps
loaded for animations are released or downsampled when the animation is
not in the foreground.
2. Asset Resolution Audit:
* The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
3. View Lifecycle Management:
* Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
tab are properly detached or their animations are cleared when switching between tabs.
4. Fix Surface Leaks:
* Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
native resource exhaustion.
منابع اضافی برای تفسیر دادههای هیپ دامپ
منابع زیر اطلاعات بیشتری در مورد تفسیر دادههای هیپ و اشکالزدایی میزان استفاده از حافظه ارائه میدهند:
- تحلیل دستی: از راهنمای Perfetto Heap Dump Explorer برای یادگیری نحوه پیمایش و تفسیر تجسمهای هیپ دامپ در رابط کاربری Perfetto استفاده کنید.
- تخصیصهای جاوا/کاتلین: برای آشنایی گام به گام با تحلیل دادههای هیپ زمان اجرای اندروید (ART) ، بخش «تصویرسازی اولین هیپ دامپ ART» را مطالعه کنید.
- تخصیصهای بومی: برای یادگیری نحوه جمعآوری و تحلیل پروفایلهای حافظه بومی (C/C++) به مستندات Perfetto Native Profiling مراجعه کنید.
- بازرسی رابط خط فرمان (CLI): از adb dumpsys meminfo برای دریافت خلاصهای سریع از میزان استفاده از حافظه برنامه خود در دستگاه استفاده کنید.
بهبود استفاده از حافظه
برای کسب اطلاعات بیشتر در مورد بهبود استفاده از حافظه برنامه خود، به این بخشها مراجعه کنید:
- کاهش حجم کد و منابع برنامه شما
- نظارت بر حافظه موجود و میزان استفاده از حافظه
- از ساختارهای کد با بهرهوری بیشتر در حافظه استفاده کنید
برای راهنمایی دقیق در مورد رفع مشکلات حافظه، به راهنمای مدیریت حافظه برنامه خود مراجعه کنید.