Memori adalah resource yang penting dan terbatas pada perangkat yang didukung Android. Sebagai developer platform Android atau OEM, memahami cara kerja memori di setiap level—mulai dari runtime Java hingga kernel Linux—sangat penting untuk membangun sistem yang berperforma tinggi dan stabil.
Panduan ini memberikan ringkasan komprehensif tentang arsitektur memori Android, alat yang tersedia untuk analisis, dan latihan praktis untuk membantu Anda mengidentifikasi dan menyelesaikan masalah terkait memori.
Tujuan
Setelah menyelesaikan panduan ini, Anda akan dapat:
- Menjelaskan konsep dasar memori Android, termasuk model proses Zygote dan file yang dipetakan memori.
- Membedakan antara Resident Set Size (RSS), Proportional Set Size (PSS), dan Unique Set Size (USS).
- Gunakan alat command line standar seperti
dumpsys meminfodanshowmapuntuk menilai penggunaan memori dengan cepat. - Ambil dan analisis heap dump Java menggunakan AHAT untuk menemukan kebocoran dan alokasi yang berlebihan.
- Gunakan Perfetto dan
heapprofduntuk membuat profil memori Java dan native di seluruh sistem. - Pahami indikator tekanan memori di seluruh sistem seperti Pressure Stall Information (PSI) dan pantau aktivitas Low Memory Killer (LMK).
- Amati aktivitas reklamasi tingkat kernel, termasuk penghapusan cache halaman dan swap ZRAM.
Struktur panduan
Panduan ini disusun dalam bagian-bagian berikut, yang dirancang untuk dibaca secara berurutan:
- Konsep dasar: Prinsip teknis inti memori Android.
- Alat penilaian cepat: Menggunakan
meminfo,showmap, danprocstatsuntuk triase cepat. - Menganalisis memori Java: Pembahasan mendalam tentang heap Java dengan AHAT.
- Bitmap dan memori: Memahami dampak gambar terhadap RAM dan menggunakan alat untuk membuat profilnya.
- Menganalisis memori native: Membuat profil memori C/C++ dengan
Perfetto dan
heapprofd. - WebView dan memori: Memahami arsitektur multiproses dan jejak memori WebView.
- Kode aplikasi adalah memori: Memahami pengaruh pemuatan class dan bloatware dex terhadap RAM.
- Thread dan memori: Menganalisis biaya stack thread native.
- Lokalitas dan performa memori: Memahami pengaruh pola akses data terhadap performa CPU.
- Pengikatan layanan dan status proses: Memahami pengaruh dependensi lintas proses terhadap skor OOM.
- Pemecahan masalah di seluruh sistem: Memantau PSI, LMK, swap ZRAM, dan penghapusan cache halaman.
- Klaim kembali memori: pengeluaran dan swap: Memahami memcg,
pengisian daya, dan klaim kembali proaktif dengan
memory.reclaim. - Interaksi kswapd dan lmkd: Memahami cara kerja kswapd dan lmkd bersama-sama saat berada di bawah tekanan.
- Mengembalikan halaman memori ke OS: Menggunakan
madvisedanposix_fadviseuntuk mengembalikan halaman heap dan halaman cache file yang tidak digunakan ke kernel. - Menjaga pekerjaan latar belakang tetap aktif dengan proses yang ramping: Memindahkan layanan latar belakang dan worker ke proses khusus sehingga memori UI dan memori grafis tidak dipertahankan pada prioritas yang lebih tinggi.
Prasyarat dan lingkungan
Panduan ini menyajikan alur kerja referensi, data tolok ukur, dan studi kasus yang menunjukkan cara mendiagnosis dan menyelesaikan masalah memori Android.
- Alat analisis: Teknik dalam panduan ini terutama menggunakan alat performa Android standar, termasuk Perfetto,
dumpsys meminfo,showmap, dan AHAT. - Hak istimewa root: Beberapa alur kerja diagnostik tingkat sistem (seperti
memeriksa tekanan memori kernel atau penghitung PMU hardware) memerlukan
hak istimewa root yang ditingkatkan (
adb root) pada build emulator atau perangkat userdebug.
Mulai dari Sini: Konsep dasar