Android çalışma zamanı (ART), kod profili oluşturma özelliğiyle birlikte tam zamanında (JIT) derleyici içerir. Bu derleyici, Android uygulamaları çalışırken performanslarını sürekli olarak iyileştirir. JIT derleyici, ART'nin mevcut önceden derleme (AOT) derleyicisini tamamlar, çalışma zamanı performansını artırır, depolama alanından tasarruf sağlar ve uygulama ile sistem güncellemelerini hızlandırır. Ayrıca, otomatik uygulama güncellemeleri sırasında veya kablosuz (OTA) güncellemeleri sırasında uygulamaların yeniden derlenmesi sırasında sistemin yavaşlamasını önleyerek AOT derleyicisini geliştirir.
JIT ve AOT, benzer bir optimizasyon grubuyla aynı derleyiciyi kullansa da oluşturulan kod aynı olmayabilir. JIT, çalışma zamanı türü bilgilerini kullanır, daha iyi satır içi yerleştirme yapabilir ve yığında değiştirme (OSR) derlemesini mümkün kılar. Tüm bunlar, biraz farklı bir kod oluşturur.
JIT mimarisi

JIT derleme
JIT derleme aşağıdaki etkinlikleri içerir:

- Kullanıcı uygulamayı çalıştırır. Bu işlem, ART'yi
.dex
dosyasını yüklemeye tetikler..oat
dosyası (.dex
dosyası için AOT ikilisi) varsa ART bunu doğrudan kullanır..oat
dosyaları düzenli olarak oluşturulsa da her zaman derlenmiş kod (AOT ikili dosyası) içermez..oat
dosyası derlenmiş kod içermiyorsa ART,.dex
dosyasını yürütmek için JIT ve yorumlayıcı üzerinden çalışır.
- JIT,
speed
derleme filtresine ("Uygulamadan mümkün olduğunca çok şey derle" anlamına gelir) göre derlenmemiş tüm uygulamalar için etkinleştirilir. - JIT profil verileri, yalnızca uygulamanın erişebileceği bir sistem dizinindeki dosyaya boşaltılır.
- AOT derleme (
dex2oat
) arka plan programı, derlemeyi yönlendirmek için bu dosyayı ayrıştırır.
3.Şekil JIT arka plan programı etkinlikleri.
Google Play hizmeti, paylaşılan kitaplıklara benzer şekilde davranan diğer uygulamalar tarafından kullanılan bir örnektir.
JIT iş akışı

- Profillendirme bilgileri kod önbelleğinde saklanır ve bellek baskısı altında çöp toplama işlemine tabi tutulur.
- Uygulama arka plandayken alınan anlık görüntünün eksiksiz veri (ör. JIT derlemesi yapılan her şey) içereceği garanti edilmez.
- Her şeyin kaydedilmesi için herhangi bir girişimde bulunulmaz (çünkü bu, çalışma zamanı performansını etkileyebilir).
- Yöntemler üç farklı durumda olabilir:
- yorumlanmış (dex kodu)
- JIT derlemesi
- AOT derlemesi
- JIT'yi ön plandaki uygulama performansını etkilemeden çalıştırmak için gereken bellek miktarı, söz konusu uygulamaya bağlıdır. Büyük uygulamalar küçük uygulamalara göre daha fazla bellek gerektirir. Genel olarak büyük uygulamalar yaklaşık 4 MB'ta sabitlenir.
JIT günlük kaydını etkinleştirme
JIT günlük kaydını etkinleştirmek için aşağıdaki komutları çalıştırın:
adb root
adb shell stop
adb shell setprop dalvik.vm.extra-opts -verbose:jit
adb shell start
JIT'yi devre dışı bırakma
JIT'yi devre dışı bırakmak için aşağıdaki komutları çalıştırın:
adb root
adb shell stop
adb shell setprop dalvik.vm.usejit false
adb shell start
Derlemeyi zorunlu tutma
Derlemeyi zorlamak için aşağıdakileri çalıştırın:
adb shell cmd package compile
Belirli bir paketi zorunlu olarak derlemek için yaygın kullanım alanları:
- Profile dayalı:
adb shell cmd package compile -m speed-profile -f my-package
- Tam:
adb shell cmd package compile -m speed -f my-package
Tüm paketlerin zorunlu olarak derlenmesi için yaygın kullanım alanları:
- Profile dayalı:
adb shell cmd package compile -m speed-profile -f -a
- Tam:
adb shell cmd package compile -m speed -f -a
Profil verilerini temizleme
Android 13 veya önceki sürümlerde
Yerel profil verilerini temizlemek ve derlenmiş kodu kaldırmak için aşağıdakileri çalıştırın:
adb shell pm compile --reset
Android 14 veya sonraki sürümlerde
Yalnızca yerel profil verilerini temizlemek için:
adb shell pm art clear-app-profiles
Not: Android 13 veya önceki sürümlerdeki komutun aksine, bu komut uygulamayla yüklenen harici profil verilerini (`.dm`) temizlemez.
Yerel profil verilerini temizlemek ve yerel profil verilerinden oluşturulan derlenmiş kodu kaldırmak için (ör. yükleme durumuna sıfırlamak için) aşağıdakileri çalıştırın:
adb shell pm compile --reset
Not: Bu komut, uygulamayla yüklenen harici profil verilerinden (`.dm`) oluşturulan derlenmiş kodu kaldırmaz.
Derlenmiş tüm kodu temizlemek için şu komutu çalıştırın:
adb shell cmd package compile -m verify -f
Not: Bu komut, yerel profil verilerini korur.