ART tam zamanında derleyici uygulama

Android çalışma zamanı (ART), kod profili oluşturma özelliğine sahip tam zamanında (JIT) derleyici içerir çalıştırılan Android uygulamalarının performansını sürekli olarak iyileştiren bir programdır. JIT derleyicisi, ART'ın mevcut ön-zaman (AOT) derleyicisini tamamlar ve çalışma zamanı performansını artırır, depolama alanından tasarruf sağlar, uygulamayı hızlandırır ve sistem güncellemeleri. Ayrıca, sistemden kaçınarak AOT derleyicisini geliştirir otomatik uygulama güncellemeleri veya uygulamaların yeniden derlenmesi sırasında yavaşlama (OTA) güncellemeler yaparken.

JIT ve AOT, benzer optimizasyon gruplarıyla aynı derleyiciyi kullansalar da oluşturulan kod aynı olmayabilir. JIT, çalışma zamanı türünü kullanır satır içine almayı daha iyi yapabilir ve yığın değişimini (OSR) etkinleştirir. her biri biraz farklı kod oluşturur.

JIT mimarisi

JIT mimarisi.
Şekil 1. JIT mimarisi.

JIT derleme

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

Profil rehberliğinde karşılaştırma.
Şekil 2. Profil rehberliğinde derleme.
  1. Kullanıcı uygulamayı çalıştırır, ardından da .dex öğesinin yüklenmesi için ART tetiklenir dosyası olarak kaydedebilirsiniz.
    • .oat dosyası (.dex için AOT ikili programı) dosyası) kullanabilirsiniz. .oat dosyaları, düzenli olarak oluşturulur, her zaman derlenmiş kod (AOT ikili programı) içermez.
    • .oat dosyası derlenmiş kod içermiyorsa ART çalıştırılır .dex dosyasını yürütmek için JIT ve çevirmen aracılığıyla.
  2. JIT, speed derleme filtresi ("Mümkün olduğunca çok derleyin izin verilmez).
  3. JIT profil verileri yalnızca erişebilir.
  4. AOT derlemesi (dex2oat) arka plan programı bu dosyayı Drive için ayrıştırır hoş geldiniz.
    .
    . JIT arka plan programı
    Şekil 3. JIT arka plan programı etkinlikleri.

Google Play hizmeti, Google Play'deki bir diğer uygulama tarafından benzerdir.

JIT iş akışı

JIT mimarisi.
Şekil 4. JIT veri akışı.
  • Profil oluşturma bilgileri kod önbelleğinde depolanır ve çöpe gönderilir fazla veri toplamanıza yardımcı olur.
    • Uygulama etkinken anlık görüntünün arka plan tüm verileri (yani JIT'e tabi her şeyi) içerir.
    • Her şeyin kaydedilmesi için herhangi bir girişimde bulunulmaz (çünkü bu, çalışma zamanı performansı).
  • Yöntemler üç farklı durumda olabilir:
    • yorumlandı (dex kod)
    • JIT derlendi
    • AOT derlendi
    ziyaret edin. Hem JIT hem de AOT kodu varsa (ör. yinelenen optimizasyonların iptal edilmesi nedeniyle) JITed kodu tercih edilir.
  • Ön plan uygulamasını etkilemeden JIT çalıştırmak için bellek gereksinimi performans, söz konusu uygulamaya bağlıdır. Büyük uygulamalar daha fazla bellek gerektirir küçük uygulamalara göre daha önemlidir. Genel olarak, büyük uygulamalar yaklaşık 4 MB boyutunda sabitlenir.

JIT günlük kaydını aç

JIT günlük kaydını açmak 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'i devre dışı bırak

JIT'i 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 kıl

Derlemeyi zorunlu kılmak için aşağıdaki komutu çalıştırın:

adb shell cmd package compile

Belirli bir paketi derlemeye zorlamak için yaygın kullanım alanları:

  • Profil tabanlı:
    adb shell cmd package compile -m speed-profile -f my-package
    
    .
  • Tam:
    adb shell cmd package compile -m speed -f my-package
    
    .

Tüm paketleri derlemeye zorlamak için genel kullanım alanları:

  • Profil tabanlı:
    adb shell cmd package compile -m speed-profile -f -a
    
    .
  • Tam:
    adb shell cmd package compile -m speed -f -a
    
    .

Profil verilerini temizle

Android 13 veya önceki sürümlerde

Yerel profil verilerini temizlemek ve derlenmiş kodu kaldırmak için aşağıdaki komutu ç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 komutundan farklı olarak ya da daha önceki bir sürüm içeriyorsa, bu komut yüklü olması gerekir.

Yerel profil verilerini temizlemek ve yerel profillerden oluşturulan derlenmiş kodu kaldırmak için: profil verilerini (ör. yükleme durumuna sıfırlamak için) aşağıdakini çalıştırın:

adb shell pm compile --reset 

Not: Bu komut, uygulamayla birlikte yüklenen harici profil verileri (".dm")

Tüm derlenmiş kodları temizlemek için şu komutu çalıştırın:

adb shell cmd package compile -m verify -f 

Not: Bu komut yerel profil verilerini saklar.