Platform Android berjalan pada premis bahwa memori bebas adalah memori yang sia-sia. Android mencoba menggunakan semua memori yang tersedia sepanjang waktu. Misalnya, sistem menyimpan aplikasi yang ditutup di memori sehingga pengguna dapat membukanya kembali dengan cepat. Karena alasan ini, perangkat Android sering berjalan dengan memori bebas yang sangat sedikit (lihat Alokasi memori Android di sini).
Proses daemon low memory killer (LMK) Android memantau status memori sistem Android yang sedang berjalan dan bereaksi terhadap tekanan memori tinggi dengan menghentikan proses yang paling tidak penting untuk menjaga performa sistem pada tingkat yang dapat diterima.
Untuk menentukan proses yang akan dihentikan, daemon LMK menggunakan skor kehabisan memori yang disebut oom_adj_score untuk memprioritaskan proses yang berjalan. Proses dengan skor tinggi akan dihentikan terlebih dahulu. Aplikasi latar belakang dihentikan terlebih dahulu; proses sistem, terakhir. Tabel berikut mencantumkan kategori skor LMK dari tinggi ke rendah. Item dalam kategori skor tertinggi, di baris pertama, akan dihentikan terlebih dahulu:
Alat pembuatan profil memori
Alat berikut dapat membantu Anda menemukan dan mendiagnosis masalah memori dengan cara berikut:
- Lihat bagaimana aplikasi Anda mengalokasikan memori dari waktu ke waktu. Anda dapat menemukan grafik real-time tentang banyaknya memori yang digunakan aplikasi Anda, jumlah objek Java yang dialokasikan, dan kapan pembersihan sampah memori dilakukan.
- Mulai peristiwa pembersihan sampah memori dan ambil cuplikan dari heap Java selagi aplikasi berjalan.
- Rekam alokasi memori aplikasi Anda, periksa semua objek yang dialokasikan, dan lihat pelacakan tumpukan untuk setiap alokasi.
Jika game Anda berjalan di mesin native, gunakan HWAddress Sanitizer untuk men-debug alokasi memori native.
Memory Profiler Android Studio
Android Studio menyediakan Memory Profiler sebagai komponen Android Profiler yang membantu Anda mengidentifikasi kebocoran memori dan churn memori yang dapat menyebabkan aplikasi tersendat, berhenti merespons, dan bahkan tidak berfungsi. Profiler menampilkan grafik real-time penggunaan memori aplikasi Anda dan memungkinkan Anda merekam heap dump, memaksa pembersihan sampah memori, dan melacak alokasi memori.
Alat pembuatan profil memori Unity
Jika Anda menggunakan Unity Engine untuk membangun aplikasi, Anda dapat mengikuti panduan pembuatan profil memori Unity. Unity menawarkan dua alat untuk menganalisis penggunaan memori di aplikasi Anda di Unity.
Yang pertama adalah modul Memory Profiler, yang merupakan profiler bawaan yang memberi Anda informasi dasar tentang tempat aplikasi Anda menggunakan memori.
Alat kedua adalah paket Memory Profiler, yang merupakan paket Unity yang dapat Anda tambahkan ke project. Paket ini menambahkan jendela Memory Profiler tambahan ke Unity Editor. Memory Profiler memungkinkan Anda menganalisis penggunaan memori dalam aplikasi secara lebih mendetail. Anda dapat menyimpan dan membandingkan snapshot untuk menemukan kebocoran memori atau melihat tata letak memori untuk menemukan masalah fragmentasi memori.
Insight Memori Unreal
Aplikasi yang dibuat oleh Unreal Engine dapat menggunakan Unreal Memory Insights untuk melihat informasi mendetail tentang alokasi dan dealokasi memori, termasuk tag Low Level Memory (LLM) dan callstack yang terkait dengan blok memori.
Sistem kueri Insight Memori dapat menemukan alokasi aktif kapan saja, mengidentifikasi perubahan penggunaan memori, menemukan kebocoran memori, dan membedakan alokasi jangka pendek dari jangka panjang.
Mulai dari UE 5.4, Memory Insights mendukung pelacakan memori dengan callstack untuk project Android.
Insight memori rendah
Android menyediakan callback dan API yang memungkinkan Anda mengurangi persyaratan memori game dan menentukan alasan penghentian game sebelumnya.
Callback
Jangan mendaftar untuk callback trim yang tidak digunakan lagi. Android tidak memiliki API untuk mendeteksi peristiwa tekanan memori native saat sistem mengalami batas memori.
Callback pemangkasan tidak membantu mencegah penghentian proses karena memori rendah,
jadi Android menghentikan penggunaan semuanya
kecuali TRIM_MEMORY_UI_HIDDEN
dan TRIM_MEMORY_BACKGROUND.
Penghentian game
Android mencoba menggunakan semua memori yang tersedia untuk meng-cache aplikasi dan game guna memastikan aplikasi dan game tersebut dimuat dengan cepat (meningkatkan pengalaman pengguna), tetapi saat memori menjadi terbatas, sistem akan menghentikan aplikasi dan game yang paling banyak menggunakan memori untuk mengosongkan memori bagi pengoperasian perangkat yang normal.
Informasi, insight, dan praktik terbaik untuk membantu Anda mencapai penggunaan memori game yang lebih baik mencakup hal berikut:
- Gunakan
ApplicationExitInfo: API ini menampilkan alasan mengapa jalannya game sebelumnya dihentikan oleh sistem Android. GunakanApplicationExitInfountuk memeriksa memori rendah sebagai alasan kematian proses sebelumnya. Periksa apakah game dihentikan karena memori rendah sehingga game dapat dioptimalkan untuk menggunakan lebih sedikit memori di perangkat tersebut. - Lihat total RAM fisik:
Untuk mencegah game dihentikan saat berada di
latar depan dan agar sesuai dengan kemampuan perangkat, lihat total
RAM fisik per perangkat untuk mendapatkan perincian yang akurat guna menyesuaikan penggunaan memori game
berdasarkan hal tersebut. Jika tujuannya adalah mencegah aplikasi dihentikan tak lama setelah dipindahkan ke latar belakang (untuk memungkinkan pemain melakukan multitasking), gunakan callback
trim
(khususnya
TRIM_MEMORY_UI_HIDDEN) untuk mengurangi penggunaan memori game Anda.