Contoh ini menunjukkan cara menggunakan pelacakan sistem dengan Macrobenchmark, beserta pembuatan profil memori, untuk mengukur dan memperbaiki jenis masalah performa tertentu.
Memproses debug startup aplikasi menggunakan systrace
Saat memproses debug pada waktu startup, sebaiknya gunakan log systrace. Systrace adalah sistem yang menggunakan kode yang diinstrumentasi sebelumnya untuk menampilkan berapa lama peristiwa tertentu terjadi saat terjadi. Trace ini memungkinkan Anda untuk melihat apa yang terjadi dalam aplikasi, atau bahkan dalam proses lain di seluruh sistem. Platform Android dan library Jetpack memiliki instrumentasi pada berbagai peristiwa utama dalam aplikasi, dan log tersebut telah dicatat sebagaimana mestinya. Anda juga dapat melengkapi aplikasi dengan trace kustom Anda sendiri, yang akan muncul di alat visualisasi systrace yang sama, untuk memberikan gambaran keseluruhan tentang hal yang terjadi dalam aplikasi.
Menggunakan systrace atau Perfetto
Untuk mempelajari penggunaan systrace dasar lebih lanjut, lihat video berikut: Memproses debug Performa Aplikasi.
Untuk menganalisis waktu startup, terlebih dahulu Anda harus memahami apa yang terjadi selama startup. Jika Anda menginginkan informasi lebih dari yang dijelaskan di halaman ini, dokumentasi tentang waktu startup Aplikasi memberikan ringkasan tentang proses startup aplikasi.
Tahap startup aplikasi adalah:
- Meluncurkan proses
- Menginisialisasi objek aplikasi generik
- Membuat dan inisialisasi aktivitas
- Meng-inflate tata letak
- Menggambar frame pertama
Jenis startup memiliki tahapan berikut:
- Cold start: Tahapan ini terjadi saat aplikasi dimulai untuk pertama kalinya sejak booting, atau sejak proses aplikasi dimatikan, oleh pengguna atau oleh sistem. Startup membuat proses baru tanpa status tersimpan.
- Warm start: Tahapan ini terjadi saat aplikasi sudah berjalan di latar belakang, tetapi aktivitas harus dibuat ulang dan dibawa ke latar depan. Aktivitas dibuat ulang saat menggunakan kembali proses yang ada, atau proses dibuat ulang dengan status tersimpan. Library pengujian Macrobenchmark mendukung pengujian warm startup yang konsisten menggunakan opsi pertama.
- Hot start: Hal ini terjadi ketika proses dan aktivitas masih berjalan dan hanya perlu dibawa ke latar depan, mungkin dengan membuat ulang beberapa objek sesuai kebutuhan, serta merender aktivitas latar depan yang baru. Ini adalah skenario startup terpendek.
Sebaiknya tangkap systraces menggunakan aplikasi pelacakan sistem di perangkat yang tersedia di Opsi Developer. Jika ingin menggunakan alat command line, Perfetto tersedia untuk digunakan dengan Android 10 (API level 29) dan yang lebih tinggi, sedangkan perangkat pada versi sebelumnya harus menggunakan systrace.
Perhatikan bahwa istilah "frame pertama" sedikit keliru karena aplikasi dapat bervariasi secara signifikan dalam cara menangani startup setelah membuat aktivitas awal. Beberapa aplikasi akan terus mengalami inflasinya untuk beberapa frame, sementara aplikasi lainnya akan langsung diluncurkan ke aktivitas sekunder.
Jika memungkinkan, sebaiknya sertakan
panggilan
reportFullyDrawn
(tersedia di Android 10 dan lebih tinggi) saat startup selesai dari
sudut pandang aplikasi.
Beberapa hal yang perlu diperhatikan dalam pelacakan sistem ini meliputi:
Pada gambar 4, perlu diperhatikan bahwa proses lain yang menjalankan I/O secara bersamaan dapat menyebabkan pertentangan I/O, sehingga pastikan proses lain tidak berjalan.
Aktivitas yang signifikan pada thread lain dapat mengganggu UI thread, jadi berhati-hatilah terhadap pekerjaan latar belakang selama startup. Perhatikan bahwa perangkat dapat memiliki konfigurasi CPU yang berbeda, sehingga jumlah thread yang dapat dijalankan secara paralel dapat bervariasi di berbagai perangkat.
Lihat juga panduan tentang sumber umum jank
Menggunakan memory profiler Android Studio
Memory profiler Android Studio adalah alat yang andal untuk mengurangi tekanan memori yang mungkin disebabkan oleh kebocoran memori atau pola penggunaan yang buruk. Alat ini memberikan tampilan langsung dari alokasi objek dan pembersihan.
Untuk memperbaiki masalah memori di aplikasi, Anda dapat menggunakan memory profiler untuk melacak alasan dan seberapa sering pembersihan sampah memori dilakukan, serta apakah mungkin ada kebocoran memori yang menyebabkan heap terus meningkat dari waktu ke waktu.
Membuat profil memori aplikasi dipecah menjadi beberapa langkah berikut:
1. Mendeteksi masalah memori
Untuk mendeteksi masalah memori, mulai dengan merekam sesi pembuatan profil memori untuk aplikasi Anda. Berikutnya, cari objek yang jejak memorinya meningkat, yang pada akhirnya memicu peristiwa pembersihan sampah memori.
Gambar 6. Memory profiler menampilkan peristiwa pembersihan sampah memori.{.:image-caption}
Setelah mengidentifikasi kasus penggunaan yang menambah tekanan memori, mulailah menganalisis penyebab utamanya.
2. Mendiagnosis hot spot tekanan memori
Pilih rentang pada linimasa untuk memvisualisasikan alokasi dan shallow size.
Ada beberapa cara untuk mengurutkan data ini. Bagian berikut memberikan beberapa contoh tentang bagaimana setiap tampilan dapat membantu Anda menganalisis masalah.
Mengatur berdasarkan class
Mengatur berdasarkan class berguna bila Anda ingin menemukan class yang menghasilkan objek yang seharusnya di-cache atau digunakan kembali dari gabungan memori.
Misalnya, bayangkan Anda melihat aplikasi yang membuat 2.000 objek class yang disebut "Vertex" setiap detik. Hal ini akan meningkatkan jumlah alokasi sebesar 2.000 setiap detik dan Anda akan melihatnya saat mengurutkan berdasarkan class. Apakah objek tersebut harus digunakan kembali untuk menghindari pembuatan sampah tersebut? Jika jawabannya adalah ya, maka kemungkinan penerapan gabungan memori akan diperlukan.
Mengatur berdasarkan callstack
Mengatur berdasarkan callstack berguna saat ada jalur panas tempat memori dialokasikan, seperti di dalam loop atau fungsi tertentu yang melakukan banyak pekerjaan alokasi. Melihat melalui callstack akan memungkinkan Anda melihat hotspot alokasi tersebut.
Shallow size versus retained size
Shallow size hanya melacak memori objek itu sendiri, sehingga sangat berguna untuk melacak class sederhana yang terdiri dari terutama primitif.
Retained size menunjukkan total memori yang dialokasikan oleh objek secara langsung serta objek lain yang dialokasikan yang hanya direferensikan oleh objek. Hal ini berguna untuk melacak tekanan memori karena objek kompleks yang memerlukan alokasi objek lain dan bukan hanya kolom primitif. Untuk mendapatkan nilai ini, buat memory dump menggunakan memory profiler. Objek yang dialokasikan dalam heap tersebut telah ditambahkan ke tampilan.
3. Mengukur dampak pengoptimalan
Satu peningkatan pengoptimalan memori yang mudah diukur adalah pembersihan sampah memori. Saat pengoptimalan mengurangi tekanan memori, Anda akan melihat lebih sedikit pembersihan sampah memori (GC). Untuk mengukurnya, ukur waktu di antara GC di linimasa profiler. Anda seharusnya melihat durasi yang lebih lama antar-GC setelah pengoptimalan memori.
Dampak akhir dari peningkatan memori seperti ini adalah:
- Aplikasi akan lebih jarang dimatikan karena masalah Out of Memory jika aplikasi tidak terus-menerus mengalami tekanan memori.
- Memiliki lebih sedikit GC meningkatkan metrik jank. Hal ini karena GC menyebabkan pertentangan CPU, yang dapat menyebabkan perenderan tugas yang ditangguhkan saat GC terjadi.
Direkomendasikan untuk Anda
- Catatan: teks link ditampilkan saat JavaScript nonaktif
- Mengambil metrik Macrobenchmark
- Analisis dan pengoptimalan startup aplikasi {:#app-startup-analysis-optimization}