Runtime Android dan Dalvik

Android Runtime (ART) adalah runtime terkelola yang digunakan oleh aplikasi dan beberapa sistem layanan IT di Android. ART dan pendahulunya, Dalvik, awalnya dibuat khususnya untuk project Android. ART saat runtime mengeksekusi Dalvik format yang dapat dieksekusi (DEX) dan spesifikasi bytecode DEX.

ART dan Dalvik adalah runtime kompatibel yang menjalankan bytecode DEX, sehingga aplikasi yang dikembangkan untuk Dalvik seharusnya berfungsi saat dijalankan dengan ART. Namun, beberapa yang berfungsi pada Dalvik tidak berfungsi di ART. Untuk mengetahui informasi tentang masalah yang paling penting, lihat Memverifikasi perilaku aplikasi pada Android Runtime (ART).

Fitur ART

Berikut adalah beberapa fitur utama yang diterapkan oleh ART.

Kompilasi mendahului-waktu (Ahead-of-Time/AOT)

ART memperkenalkan kompilasi ahead-of-time (AOT), yang dapat meningkatkan kualitas aplikasi tingkat tinggi. ART juga memiliki verifikasi waktu pemasangan yang lebih ketat daripada Dalvik.

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

Peningkatan pembersihan sampah memori

Pembersihan sampah memori (GC) sangat intensif sumber daya, yang dapat mengganggu kinerja aplikasi, menyebabkan tampilan putus-putus, responsivitas UI yang buruk, dan masalah lainnya. ART meningkatkan kualitas sampah pengumpulan data dalam beberapa cara:

  • Sebagian besar desain serentak dengan satu jeda GC
  • Penyalinan serentak untuk mengurangi penggunaan dan fragmentasi memori latar belakang
  • Durasi jeda GC tidak bergantung pada ukuran heap
  • Kolektor dengan total waktu GC lebih rendah untuk kasus khusus pembersihan objek berumur pendek yang baru dialokasikan
  • Peningkatan ergonomi pembersihan sampah memori, membuat sampah serentak koleksi lebih tepat waktu, sehingga GC_FOR_ALLOC sangat jarang terjadi dalam kasus penggunaan umum

Peningkatan pengembangan dan proses debug

ART menawarkan sejumlah fitur untuk meningkatkan pengembangan dan proses debug aplikasi.

Dukungan untuk profiler pengambilan sampel

Sebelumnya, developer menggunakan Traceview alat (dirancang untuk pelacakan eksekusi aplikasi) sebagai profiler. Sementara {i>Traceview<i} memberikan informasi yang berguna, hasilnya pada Dalvik telah condong ke arah overhead panggilan per metode, dan menggunakan alat tersebut sangat memengaruhi performa waktu proses.

ART menambahkan dukungan untuk profiler pengambilan sampel khusus yang tidak memiliki keterbatasan praktik. Hal ini memberikan gambaran yang lebih akurat tentang eksekusi aplikasi tanpa perlambatan yang signifikan. Dukungan pengambilan sampel ditambahkan ke Traceview untuk Dalvik dalam rilis KitKat.

Dukungan untuk fitur proses debug lainnya

ART mendukung sejumlah opsi debug baru, terutama di monitor- dan fungsionalitas terkait pembersihan sampah memori. Misalnya, Anda dapat:

  • Lihat kunci yang ditahan di stack trace, lalu beralihlah ke thread yang memegang kunci.
  • Tanyakan berapa banyak {i>live instance <i}yang ada pada kelas tertentu, tanyakan untuk dan melihat referensi apa yang membuat sebuah objek tetap aktif.
  • Memfilter peristiwa (seperti titik henti sementara) untuk instance tertentu.
  • Melihat nilai yang ditampilkan oleh metode saat keluar (menggunakan “method-exit” peristiwa).
  • Tetapkan watchpoint kolom untuk menangguhkan eksekusi program saat diakses dan/atau diubah.

Detail diagnostik yang ditingkatkan dalam pengecualian dan laporan error

ART memberi Anda sebanyak mungkin konteks dan detail saat pengecualian runtime terjadi. ART memberikan detail pengecualian yang diperluas untuk java.lang.ClassCastException, java.lang.ClassNotFoundException, dan java.lang.NullPointerException. (Versi Dalvik berikutnya memberikan detail pengecualian yang diperluas untuk java.lang.ArrayIndexOutOfBoundsException dan java.lang.ArrayStoreException, yang sekarang mencakup ukuran array dan offset luar batas, serta ART juga melakukannya.)

Misalnya, java.lang.NullPointerException sekarang menampilkan informasi tentang apa yang coba dilakukan aplikasi dengan pointer null, seperti kolom tempat aplikasi mencoba menulis, atau metode yang digunakan untuk panggilan telepon. Berikut beberapa contoh umumnya:

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 masalah pada native aplikasi, dengan menyertakan informasi stack Java dan native.

Melaporkan masalah

Jika Anda mengalami masalah yang bukan disebabkan oleh masalah JNI aplikasi, laporkan mereka melalui Android Open Source Issue Tracker Project. Sertakan adb bugreport dan link ke aplikasi di Google Play Store jika tersedia. Atau, jika memungkinkan, pasang APK yang mereproduksi masalah.