حافظه منبعی حیاتی و محدود در دستگاههای مجهز به Android است. بهعنوان توسعهدهنده پلاتفرم Android یا OEM، درک نحوه عملکرد حافظه در هر سطح—از زمان اجرای Java تا هسته Linux—برای ساختن یک سیستم کارآمد و پایدار ضروری است.
این راهنما نمای کلی جامعی از معماری حافظه Android، ابزارهای موجود برای تجزیهوتحلیل، و تمرینهای عملی برای کمک به شما در شناسایی و حل مشکلات مربوط به حافظه ارائه میدهد.
اهداف
پساز تکمیل این راهنما، میتوانید:
- توضیح مفاهیم اساسی حافظه Android، ازجمله مدل فرایند Zygote و فایلهای نگاشتشده در حافظه.
- تفاوت بین Resident Set Size (RSS)، Proportional Set Size (PSS)، و Unique Set Size (USS) را تشخیص دهید.
- از ابزارهای خط فرمان استاندارد مانند
dumpsys meminfoوshowmapبرای ارزیابی سریع استفاده از حافظه استفاده کنید. - رونوشتهای پشته جاوا را بااستفاده از AHAT ضبط و تحلیل کنید تا نشتها و تخصیصهای بیشازحد را پیدا کنید.
- از Perfetto و
heapprofdبرای نمایهسازی Java و حافظه بومی در سراسر سیستم استفاده کنید. - نشانگرهای فشار حافظه در سراسر سیستم مانند Pressure Stall Information (PSI) را درک کنید و فعالیت Low Memory Killer (LMK) را پایش کنید.
- فعالیت بازیابی سطح هسته را مشاهده کنید، ازجمله تعویض ZRAM و حذف حافظه پنهان صفحه.
ساختار راهنما
این راهنما به بخشهای زیر تقسیم شده است و بهگونهای طراحی شده است که بهترتیب خوانده شود:
- مفاهیم بنیادی: اصول فنی اصلی حافظه Android.
- ابزارهای ارزیابی سریع: استفاده از
meminfo،showmap، وprocstatsبرای تریاژ سریع. - تحلیل حافظه جاوا: بررسی عمیق پشته جاوا با AHAT.
- بیتمپها و حافظه: درک نحوه تأثیر تصاویر بر RAM و استفاده از ابزارها برای نمایهسازی آنها.
- تجزیهوتحلیل حافظه بومی: نمایهسازی حافظه C/C++ با
Perfetto و
heapprofd. - «وبنما» و حافظه: آشنایی با معماری چندفرایندی و ردپای حافظه «وبنما».
- کد برنامه حافظه است: درک اینکه چگونه بارگیری کلاس و تورم dex بر RAM تأثیر میگذارد.
- رشتهها و حافظه: تجزیهوتحلیل هزینه پشتههای رشته بومی.
- محل حافظه و عملکرد: درک اینکه الگوهای دسترسی به دادهها چگونه بر عملکرد CPU تأثیر میگذارند.
- اتصالهای سرویس و وضعیتهای فرایند: آشنایی با نحوه تأثیر وابستگیهای بین فرایندی بر امتیازهای «کمبود حافظه».
- عیبیابی در سطح سیستم: نظارت بر PSI، LMK، مبادله ZRAM، و تخلیه حافظه پنهان صفحه.
- بازپسگیری حافظه: تخلیه و تعویض: آشنایی با memcg،
شارژ، و بازپسگیری پیشکنشی با
memory.reclaim. - تعامل kswapd و lmkd: آشنایی با نحوه عملکرد kswapd و lmkd با یکدیگر تحت فشار.
- برگرداندن صفحههای حافظه به سیستمعامل: استفاده از
madviseوposix_fadviseبرای برگرداندن صفحههای توده استفادهنشده و صفحههای حافظه نهان فایل به هسته. - فعال نگه داشتن کار پسزمینهای با فرایند سبک: انتقال سرویسها و کارگران پسزمینهای به فرایند اختصاصی تا حافظه واسط کاربر و گرافیک در اولویت بالا نگه داشته نشود.
پیشنیازها و محیط
این راهنما گردش کارهای مرجع، دادههای محک، و مطالعات موردی را ارائه میدهد و نحوه تشخیص و حل مشکلات حافظه Android را نشان میدهد.
- ابزارهای تجزیهوتحلیل: تکنیکهای این راهنما عمدتاً از ابزارهای استاندارد عملکرد Android استفاده میکنند، ازجمله Perfetto،
dumpsys meminfo،showmap، و AHAT. - امتیازات Root: برخیاز گردشهای کاری عیبیابی سطح سیستم (مانند
بازرسی فشار حافظه هسته یا شمارندههای PMU سختافزار) به
امتیازات Root ارتقایافته (
adb root) در دستگاه userdebug یا ساخت شبیهساز نیاز دارند.
از اینجا شروع کنید: مفاهیم بنیادی