Penggunaan memori (RSS anonim + swap) adalah metrik yang mencerminkan penggunaan memori aplikasi Anda.
Memori anonim adalah memori yang tidak didukung oleh file di penyimpanan, seperti alokasi heap dan memori yang dialokasikan mmap. Hal ini mencakup alokasi memori dinamis aplikasi Anda, termasuk heap Java atau Kotlin, alokasi heap native yang tidak dikelola (tempat data piksel Bitmap berada di Android 8.0 (level API 26) dan yang lebih tinggi), serta stack eksekusi thread. Meskipun OS dapat melepaskan memori yang didukung file saat terjadi tekanan, OS tidak dapat melepaskan memori anonim.
Resident Set Size (RSS) adalah jumlah total halaman memori (bersama dan bukan-bersama) yang digunakan oleh proses yang disimpan dalam RAM fisik. Halaman dianggap "dibagikan" jika diakses oleh lebih dari satu proses (seperti aplikasi yang mengakses library yang sama).
Untuk memori anonim, sistem dapat menulis halaman ke ruang swap (atau zRAM di Android) saat memori tertekan. Sistem dapat membaca kembali halaman ini dari swap jika diperlukan.
Secara keseluruhan, penggunaan memori (RSS anonim + swap) adalah ukuran jumlah total halaman memori aplikasi Anda yang tidak didukung oleh file di penyimpanan, termasuk memori yang juga dipertahankan oleh sistem dalam swap. Melacak RSS anonim + swap memastikan Anda melihat jejak memori aplikasi yang sebenarnya dan tidak dapat dikeluarkan.
Jika penggunaan memori aplikasi Anda tinggi, selidiki lebih lanjut dan perbaiki masalahnya menggunakan panduan di halaman ini.
Resource
Mendiagnosis penggunaan memori yang berlebihan secara lokal
Untuk mulai mendiagnosis sumber penggunaan memori yang berlebihan, Anda dapat merekam heap dump dengan Rekam heap dump di setelan developer, Android Studio, atau Perfetto. Sebaiknya mulai dengan merekam dump heap secara lokal setelah menguji perjalanan pengguna inti aplikasi Anda.
Sebaiknya uji terutama perjalanan pengguna berikut:
- WebView dan Sesi Browser Dalam Aplikasi
- Scrolling tanpa batas dengan banyak media
- Alur pembuatan dan pengeditan aset
Untuk menyelidiki potensi kebocoran memori, jalankan perjalanan pengguna yang sesuai secara lokal dan kumpulkan dump heap di berbagai status proses (terlihat, layanan latar depan, dan di-cache) untuk memverifikasi apakah aplikasi melepaskan memori setelah dipindahkan ke latar belakang. Untuk memahami bagaimana status proses ini berkorelasi dengan callback onTrimMemory, lihat panduan tentang melepaskan memori sebagai respons terhadap peristiwa.
Jika Anda men-debug masalah memori menggunakan Profiler Android Studio, Anda juga dapat menggunakan integrasi LeakCanary untuk menyederhanakan deteksi kebocoran dan bitmap duplikat guna mengoptimalkan penggunaan gambar Anda.
Setelah mengumpulkan heap dump, sebaiknya gunakan keterampilan profiler Android untuk menganalisis heap dump dan mengidentifikasi potensi sumber penggunaan memori yang tinggi.
Keterampilan Android
Lihat di GitHubProfiler Android
android skills add android-profilerBerikut contoh respons yang dapat diberikan oleh kemampuan AI:
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.
Referensi tambahan untuk menafsirkan dump heap
Referensi berikut memberikan informasi lebih lanjut tentang cara menafsirkan heap dump dan men-debug penggunaan memori:
- Analisis manual: Gunakan panduan Perfetto Heap Dump Explorer untuk mempelajari cara menjelajahi dan menafsirkan visualisasi heap dump di UI Perfetto.
- Alokasi Java/Kotlin: Baca Memvisualisasikan heap dump ART pertama Anda untuk mengetahui panduan langkah demi langkah dalam menganalisis heap dump Android Runtime (ART).
- Alokasi native: Lihat dokumentasi Pembuatan Profil Native Perfetto untuk mempelajari cara mengumpulkan dan menganalisis profil memori native (C/C++).
- Pemeriksaan CLI: Gunakan adb dumpsys meminfo untuk mendapatkan perincian cepat penggunaan memori aplikasi Anda di perangkat.
Meningkatkan penggunaan memori
Lihat bagian ini untuk mempelajari lebih lanjut cara meningkatkan penggunaan memori aplikasi Anda:
- Mengurangi jejak kode dan resource aplikasi Anda
- Memantau memori yang tersedia dan penggunaan memori
- Menggunakan konstruksi kode yang lebih hemat memori
Untuk panduan mendetail tentang cara memperbaiki masalah memori, lihat panduan Mengelola memori aplikasi Anda.