Jika Anda menulis kode native dan khawatir dengan penggunaan memorinya, sebaiknya buat profil alokasi native aplikasi Anda untuk mengetahui apakah ada peluang untuk mengoptimalkannya.
Alasan Anda harus membuat profil memori aplikasi
Android menyediakan lingkungan memori terkelola—saat Android menentukan bahwa aplikasi Anda tidak lagi menggunakan beberapa objek, pembersih sampah memori akan melepas memori yang tidak terpakai kembali ke heap. Cara Android melakukan pencarian memori yang tidak terpakai akan terus ditingkatkan, tetapi pada beberapa titik dalam semua versi Android, sistem harus menjeda kode Anda sesaat. Umumnya, jeda itu tidak akan terasa. Namun, jika aplikasi mengalokasikan memori lebih cepat dari waktu sistem mengumpulkannya, aplikasi mungkin akan tertunda saat pembersih membebaskan memori dalam jumlah yang cukup untuk memenuhi alokasi Anda. Penundaan ini dapat menyebabkan aplikasi melewati beberapa frame dan menyebabkan kelambatan yang cukup terlihat.
Untuk mengetahui informasi tentang praktik pemrograman yang dapat mengurangi penggunaan memori aplikasi, baca Mengelola memori aplikasi Anda.
Ringkasan alokasi native
Saat Anda menjalankan tugas Track Memory Consumption (Native Allocations), Android Studio Profiler melacak alokasi dan dealokasi objek dalam kode native selama jangka waktu yang Anda tentukan dan memberikan informasi berikut:
- Allocations: Jumlah objek yang dialokasikan menggunakan operator
malloc()
ataunew
selama jangka waktu yang dipilih. - Deallocations: Jumlah objek yang dibatalkan alokasinya menggunakan operator
free()
ataudelete
selama jangka waktu yang dipilih. - Ukuran Alokasi: Ukuran gabungan dalam byte dari semua alokasi selama jangka waktu yang dipilih.
- Deallocations Size: Ukuran gabungan dalam byte dari semua memori yang dibebaskan selama jangka waktu yang dipilih.
- Total Count: Nilai di kolom Allocations dikurangi nilai di kolom Deallocations.
- Ukuran Tersisa: Nilai di kolom Ukuran Alokasi dikurangi nilai di kolom Ukuran Dealokasi.
Tab Visualisasi menampilkan tampilan gabungan dari semua objek yang terkait dengan kode native dalam stack panggilan selama rentang waktu yang dipilih. Ini pada dasarnya menunjukkan jumlah total memori yang digunakan callstack dengan instance yang ditampilkan. Baris pertama menampilkan nama rangkaian pesan. Secara default, objek ditumpuk dari kiri ke kanan berdasarkan ukuran alokasi; gunakan drop-down untuk mengubah pengurutan.
Secara default, profiler menggunakan ukuran sampel 2048 byte: Setiap kali 2048 byte memori dialokasikan, snapshot memori diambil. Ukuran sampel yang lebih kecil akan menghasilkan snapshot yang lebih sering, sehingga menghasilkan data penggunaan memori yang lebih akurat. Ukuran sampel yang lebih besar menghasilkan data yang kurang akurat, tetapi menggunakan lebih sedikit resource sistem dan meningkatkan performa saat merekam. Untuk mengubah ukuran sampel, lihat Mengedit konfigurasi perekaman.