Mengukur Penggunaan Memory pada Aplikasi Android

Mengukur Penggunaan Memory pada Aplikasi Android

Mengambil data HPROF

OutOfMemoryError pada aplikasi Android merupakan error yang cukup sulit untuk dideteksi. Salah satu penyebabnya, stack trace yang didapat belum tentu bisa dijadikan acuan. Hal yang bisa dilakukan untuk menghilangkan OutOfMemoryError pada aplikasi dengan mengambil data Heap/CPU Profiling (HPROF) menggunakan Android Studio. Data yang didapat HPROF juga sangat berguna untuk kasus memory leak yang tidak terdeteksi oleh StrictMode Android.

Untuk melihat penggunaan memory, buka window Android Monitor (alt-6) lalu pilih tab Monitors. Akan tampil grafik Memory, CPU, Network dan GPU. Grafik memory akan menampilkan jumlah memory yang digunakan saat aplikasi sedang dijalankan. Pengambilan data HPROF dilakukan dengan menggunakan tombol Dump Java Heap.

Untuk kasus OutOfMemoryError, pengambilan data HPROF dilakukan saat penggunaan memory pada aplikasi mulai terlihat tidak wajar. Dari data HPROF, dapat kita mulai melakukan efisiensi pada code agar OutOfMemoryError dapat dihindari.

Contoh Kasus

MainActivity membutuhkan model Video yang diambil dari database sqlite menggunakan library ORMlite. Relasi yang dimiliki oleh model Video merupakan (1-n) terhadap model Media. Gist Snippet.

Kemudian, dump setelah activity tersebut tampil di layar. Hasil HPROF dapat langsung dilihat pada tab Captures di AndroidStudio.

Dari data HPROF yang didapat, dapat dilihat pada MainActivity melakukan alokasi objek String yang sangat banyak. Setelah kita telusuri, terdapat objek Media sebanyak 1000 buah. Dari data tersebut, bisa ditarik kesimpulan bahwa MainActivity memiliki objek Media terlalu banyak. Karena yang dibutuhkan oleh activity tersebut hanya objek Video, maka kita dapat melakukan efisiensi pada deklarasi model Video menjadi:

[code language=”java”]@DatabaseTable class Video {@field:DatabaseField(generatedId = true) var id = -1@field:DatabaseField var name = “”@field:DatabaseField var description = “”@field:ForeignCollectionField(eager = false) lateinit var medias: ForeignCollection;}[/code]

Setelah dirubah, data profiling yang didapat akan seperti berikut:

Terlihat penggunaan memory oleh class Video menurun secara drastis.

Kesimpulan

Cara efisiensi penggunaan memory seperti di atas khusus untuk penggunaan library OrmLite, tentu saja untuk kasus OutOfMemoryError lainnya memerlukan solusi yang lebih spesifik. Selain itu, selalu lakukan profiling sebelum melakukan optimisasi pada code.

Referensi