Android Runtime (ART) dan Dalvik

Android runtime (ART) adalah runtime terkelola yang digunakan oleh aplikasi dan beberapa layanan sistem di Android. ART dan pendahulunya Dalvik awalnya dibuat khusus untuk proyek Android. ART sebagai runtime mengeksekusi format Dalvik Executable dan spesifikasi bytecode Dex.

ART dan Dalvik adalah runtime yang kompatibel yang menjalankan bytecode Dex, jadi aplikasi yang dikembangkan untuk Dalvik akan berfungsi saat dijalankan dengan ART. Namun, beberapa teknik yang berhasil pada Dalvik tidak berhasil pada ART. Untuk informasi tentang masalah yang paling penting, lihat Memverifikasi perilaku aplikasi pada waktu proses Android (ART) .

Fitur SENI

Berikut adalah beberapa fitur utama yang diterapkan oleh ART.

Kompilasi sebelumnya (AOT)

ART memperkenalkan kompilasi sebelumnya (AOT), yang dapat meningkatkan kinerja aplikasi. ART juga memiliki verifikasi waktu pemasangan yang lebih ketat daripada Dalvik.

Pada waktu penginstalan, ART mengkompilasi aplikasi menggunakan alat dex2oat pada perangkat. Utilitas ini menerima file DEX sebagai input dan menghasilkan aplikasi terkompilasi yang dapat dieksekusi untuk perangkat target. Utilitas harus dapat mengkompilasi semua file DEX yang valid tanpa kesulitan. Namun, beberapa alat pasca-pemrosesan menghasilkan file yang tidak valid yang dapat ditoleransi oleh Dalvik tetapi tidak dapat dikompilasi oleh ART. Untuk informasi lebih lanjut, lihat Mengatasi Masalah Pengumpulan Sampah .

Pengumpulan sampah yang ditingkatkan

Pengumpulan sampah (GC) sangat intensif sumber daya, yang dapat mengganggu kinerja aplikasi, mengakibatkan tampilan berombak, respons UI yang buruk, dan masalah lainnya. ART meningkatkan pengumpulan sampah dalam beberapa cara:

  • Sebagian besar desain bersamaan dengan jeda GC tunggal
  • Penyalinan serentak untuk mengurangi penggunaan dan fragmentasi memori latar belakang
  • Panjang jeda GC tidak tergantung pada ukuran tumpukan
  • Kolektor dengan total waktu GC yang lebih rendah untuk kasus khusus pembersihan objek yang baru saja dialokasikan dan berumur pendek
  • Ergonomi pengumpulan sampah yang ditingkatkan, membuat pengumpulan sampah serentak lebih tepat waktu, yang membuat peristiwa GC_FOR_ALLOC sangat jarang terjadi dalam kasus penggunaan biasa

Peningkatan pengembangan dan debugging

ART menawarkan sejumlah fitur untuk meningkatkan pengembangan dan debugging aplikasi.

Dukungan untuk profiler pengambilan sampel

Secara historis, pengembang telah menggunakan alat Traceview (dirancang untuk melacak eksekusi aplikasi) sebagai profiler. Sementara Traceview memberikan informasi yang berguna, hasilnya pada Dalvik telah dicondongkan oleh overhead per-metode-panggilan, dan penggunaan alat ini secara nyata mempengaruhi kinerja waktu berjalan.

ART menambahkan dukungan untuk profiler pengambilan sampel khusus yang tidak memiliki batasan ini. Ini memberikan tampilan eksekusi aplikasi yang lebih akurat tanpa pelambatan yang signifikan. Dukungan pengambilan sampel telah ditambahkan ke Traceview untuk Dalvik dalam rilis KitKat.

Dukungan untuk lebih banyak fitur debugging

ART mendukung sejumlah opsi debug baru, terutama dalam fungsionalitas yang terkait dengan monitor dan pengumpulan sampah. Misalnya, Anda dapat:

  • Lihat kunci apa yang ditahan di jejak tumpukan, lalu lompat ke utas yang menyimpan kunci.
  • Tanyakan berapa banyak instance langsung dari kelas yang diberikan, minta untuk melihat instance, dan lihat referensi apa yang membuat objek tetap hidup.
  • Filter peristiwa (seperti breakpoint) untuk contoh tertentu.
  • Lihat nilai yang dikembalikan oleh metode saat keluar (menggunakan peristiwa "metode-keluar").
  • Tetapkan titik pengawasan bidang untuk menangguhkan eksekusi program ketika bidang tertentu diakses dan/atau dimodifikasi.

Detail diagnostik yang ditingkatkan dalam pengecualian dan laporan kerusakan

ART memberi Anda sebanyak mungkin konteks dan detail saat pengecualian runtime terjadi. ART menyediakan detail pengecualian yang diperluas untuk java.lang.ClassCastException , java.lang.ClassNotFoundException , dan java.lang.NullPointerException . (Versi Dalvik yang lebih baru menyediakan detail pengecualian yang diperluas untuk java.lang.ArrayIndexOutOfBoundsException dan java.lang.ArrayStoreException , yang sekarang menyertakan ukuran larik dan offset di luar batas, dan ART juga melakukannya.)

Misalnya, java.lang.NullPointerException sekarang menampilkan informasi tentang apa yang coba dilakukan aplikasi dengan penunjuk nol, seperti bidang yang coba ditulisi oleh aplikasi, atau metode yang coba dipanggil. Berikut adalah beberapa contoh tipikal:

java.lang.NullPointerException: Attempt to write to field 'int
android.accessibilityservice.AccessibilityServiceInfo.flags' on a null object
reference
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.lang.Object.toString()' on a null object reference

ART juga menyediakan informasi konteks yang ditingkatkan dalam laporan kerusakan asli aplikasi, dengan menyertakan Java dan informasi tumpukan asli.

Melaporkan Masalah

Jika Anda mengalami masalah apa pun yang bukan karena masalah JNI aplikasi, laporkan melalui Pelacak Masalah Proyek Sumber Terbuka Android . Sertakan laporan adb bugreport dan tautan ke aplikasi di Google Play store jika tersedia. Jika tidak, jika memungkinkan, lampirkan APK yang mereproduksi masalah.