Android runtime (ART) menyertakan compiler just-in-time (JIT) dengan pembuatan profil kode yang terus meningkatkan performa aplikasi Android saat dijalankan. Kompiler JIT melengkapi kompiler forward-of-time (AOT) ART saat ini dan meningkatkan kinerja runtime, menghemat ruang penyimpanan, dan mempercepat pembaruan aplikasi dan sistem. Ini juga meningkatkan kompiler AOT dengan menghindari perlambatan sistem selama pembaruan aplikasi otomatis atau kompilasi ulang aplikasi selama pembaruan over-the-air (OTA).
Meskipun JIT dan AOT menggunakan kompiler yang sama dengan serangkaian optimasi serupa, kode yang dihasilkan mungkin tidak sama. JIT memanfaatkan informasi tipe runtime, dapat melakukan inlining dengan lebih baik, dan memungkinkan kompilasi penggantian tumpukan (OSR), yang semuanya menghasilkan kode yang sedikit berbeda.
arsitektur JIT
kompilasi JIT
Kompilasi JIT melibatkan aktivitas berikut:
- Pengguna menjalankan aplikasi, yang kemudian memicu ART untuk memuat file
.dex
.- Jika file
.oat
(biner AOT untuk file.dex
) tersedia, ART akan menggunakannya secara langsung. Meskipun file.oat
dibuat secara teratur, file tersebut tidak selalu berisi kode yang dikompilasi (biner AOT). - Jika file
.oat
tidak berisi kode yang dikompilasi, ART dijalankan melalui JIT dan penerjemah untuk mengeksekusi file.dex
.
- Jika file
- JIT diaktifkan untuk aplikasi apa pun yang tidak dikompilasi sesuai dengan filter kompilasi
speed
(yang menyatakan "kompilasi sebanyak yang Anda bisa dari aplikasi"). - Data profil JIT dibuang ke file di direktori sistem yang hanya dapat diakses oleh aplikasi.
- Daemon kompilasi AOT (
dex2oat
) mem-parsing file tersebut untuk mendorong kompilasinya.Gambar 3. Aktivitas daemon JIT.
Layanan Google Play adalah contoh yang digunakan oleh aplikasi lain yang berperilaku serupa dengan perpustakaan bersama.
Alur kerja JIT
- Informasi pembuatan profil disimpan dalam cache kode dan dilakukan pengumpulan sampah di bawah tekanan memori.
- Tidak ada jaminan bahwa snapshot yang diambil saat aplikasi berada di latar belakang akan berisi data lengkap (yaitu semua yang di-JIT).
- Tidak ada upaya untuk memastikan semuanya dicatat (karena hal ini dapat memengaruhi kinerja runtime).
- Metode dapat berada dalam tiga keadaan berbeda:
- ditafsirkan (kode dex)
- JIT dikompilasi
- AOT dikompilasi
- Persyaratan memori untuk menjalankan JIT tanpa memengaruhi performa aplikasi latar depan bergantung pada aplikasi yang dimaksud. Aplikasi besar memerlukan lebih banyak memori dibandingkan aplikasi kecil. Secara umum, aplikasi besar menstabilkan sekitar 4 MB.
Aktifkan pencatatan JIT
Untuk mengaktifkan pencatatan JIT, jalankan perintah berikut:
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start
Nonaktifkan JIT
Untuk menonaktifkan JIT, jalankan perintah berikut:
adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start
Kompilasi paksa
Untuk memaksa kompilasi, jalankan perintah berikut:
adb shell cmd package compile
Kasus penggunaan umum untuk kompilasi paksa paket tertentu:
- Berbasis profil:
adb shell cmd package compile -m speed-profile -f my-package
- Penuh:
adb shell cmd package compile -m speed -f my-package
Kasus penggunaan umum untuk kompilasi paksa semua paket:
- Berbasis profil:
adb shell cmd package compile -m speed-profile -f -a
- Penuh:
adb shell cmd package compile -m speed -f -a
Hapus data profil
Di Android 13 atau lebih lama
Untuk menghapus data profil lokal dan menghapus kode yang dikompilasi, jalankan perintah berikut:
adb shell pm compile --reset
Di Android 14 atau lebih baru
Untuk menghapus data profil lokal saja:
adb shell pm art clear-app-profiles
Catatan: Berbeda dengan perintah untuk Android 13 atau versi lebih lama, perintah ini tidak menghapus data profil eksternal (`.dm`) yang diinstal dengan aplikasi.
Untuk menghapus data profil lokal dan menghapus kode kompilasi yang dihasilkan dari data profil lokal (yaitu, untuk mengatur ulang ke status instalasi), jalankan perintah berikut:
adb shell pm compile --reset
Catatan: Perintah ini tidak menghapus kode kompilasi yang dihasilkan dari data profil eksternal (`.dm`) yang diinstal dengan aplikasi.
Untuk menghapus semua kode yang dikompilasi, jalankan perintah ini:
adb shell cmd package compile -m verify -f
Catatan: Perintah ini menyimpan data profil lokal.