Runtime Android 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 project Android. ART sebagai runtime mengeksekusi format Dalvik Executable (DEX) dan spesifikasi bytecode DEX.

ART dan Dalvik adalah runtime yang kompatibel yang menjalankan bytecode DEX, sehingga aplikasi yang dikembangkan untuk Dalvik akan berfungsi saat berjalan dengan ART. Namun, beberapa teknik yang berfungsi di Dalvik tidak berfungsi di ART. Untuk 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 performa aplikasi. ART juga memiliki verifikasi waktu penginstalan yang lebih ketat daripada Dalvik.

Pada waktu penginstalan, ART mengompilasi aplikasi menggunakan alat dex2oat di perangkat. Utilitas ini menerima file DEX sebagai input dan menghasilkan aplikasi yang dikompilasi dan dapat dieksekusi untuk perangkat target. Utilitas ini harus dapat mengompilasi semua file DEX yang valid tanpa kesulitan. Namun, beberapa alat pascapemrosesan menghasilkan file tidak valid yang mungkin ditoleransi oleh Dalvik, tetapi tidak dapat dikompilasi oleh ART. Untuk informasi selengkapnya, lihat Menangani Masalah Pengumpulan Sampah.

Pembersihan sampah memori yang ditingkatkan

Pembersihan sampah memori (GC) sangat memerlukan banyak resource, yang dapat menurunkan performa aplikasi, sehingga menyebabkan tampilan yang tidak stabil, responsivitas UI yang buruk, dan masalah lainnya. ART meningkatkan pengumpulan sampah dengan beberapa cara:

  • Desain sebagian besar serentak dengan satu jeda GC
  • Penyalinan serentak untuk mengurangi penggunaan memori dan fragmentasi latar belakang
  • Durasi jeda GC tidak bergantung pada ukuran heap
  • Pengumpul dengan waktu GC total yang lebih rendah untuk kasus khusus pembersihan objek berumur pendek yang baru dialokasikan
  • Ergonomi pembersihan sampah memori yang ditingkatkan, sehingga pembersihan sampah memori serentak lebih tepat waktu, yang membuat peristiwa 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 sampling

Secara historis, developer telah menggunakan alat Traceview (dirancang untuk melacak eksekusi aplikasi) sebagai profiler. Meskipun Traceview memberikan informasi yang berguna, hasilnya di Dalvik telah terdistorsi oleh overhead per panggilan metode, dan penggunaan alat ini secara nyata memengaruhi performa waktu proses.

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

Dukungan untuk lebih banyak fitur proses debug

ART mendukung sejumlah opsi proses debug baru, terutama dalam fungsi terkait monitor dan pembersihan sampah memori. Misalnya, Anda dapat:

  • Lihat kunci yang disimpan dalam pelacakan tumpukan, lalu beralih ke thread yang menyimpan kunci.
  • Tanyakan jumlah instance aktif dari class tertentu, minta untuk melihat instance, dan lihat referensi yang membuat objek tetap aktif.
  • Memfilter peristiwa (seperti titik henti sementara) untuk instance tertentu.
  • Lihat nilai yang ditampilkan oleh metode saat keluar (menggunakan peristiwa “method-exit”).
  • Menetapkan titik pantau kolom untuk menangguhkan eksekusi program saat kolom tertentu diakses dan/atau diubah.

Detail diagnostik yang lebih baik dalam pengecualian dan laporan error

ART memberi Anda konteks dan detail sebanyak mungkin saat pengecualian runtime terjadi. ART menyediakan detail pengecualian yang diperluas untuk java.lang.ClassCastException, java.lang.ClassNotFoundException, dan java.lang.NullPointerException. (Dalvik versi terbaru memberikan detail pengecualian yang diperluas untuk java.lang.ArrayIndexOutOfBoundsException dan java.lang.ArrayStoreException, yang kini menyertakan ukuran array dan offset di luar batas, dan ART juga melakukannya.)

Misalnya, java.lang.NullPointerException kini menampilkan informasi tentang apa yang coba dilakukan aplikasi dengan pointer null, seperti kolom yang coba ditulis oleh aplikasi, atau metode yang coba dipanggil. 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 memberikan informasi konteks yang lebih baik dalam laporan error native aplikasi, dengan menyertakan informasi stack Java dan native.

Melaporkan masalah

Jika Anda mengalami masalah yang bukan karena masalah JNI aplikasi, laporkan masalah tersebut melalui Issue Tracker Project Open Source Android. Sertakan adb bugreport dan link ke aplikasi di Google Play Store jika tersedia. Jika tidak, jika memungkinkan, lampirkan APK yang merekonstruksi masalah.