Android çalışma zamanı ve Dalvik

Android çalışma zamanı (ART), Android'deki uygulamalar ve bazı sistem hizmetleri tarafından kullanılan yönetilen çalışma zamanıdır. ART ve onun öncülü Dalvik, başlangıçta özellikle Android projesi için yaratıldı. Çalışma zamanı olarak ART, Dalvik çalıştırılabilir (DEX) formatını ve DEX bayt kodu spesifikasyonunu yürütür.

ART ve Dalvik, DEX bayt kodunu çalıştıran uyumlu çalışma zamanlarıdır, dolayısıyla Dalvik için geliştirilen uygulamalar ART ile çalışırken çalışmalıdır. Ancak Dalvik'te işe yarayan bazı teknikler ART'ta işe yaramıyor. En önemli sorunlar hakkında bilgi için bkz. Android çalışma zamanında (ART) uygulama davranışını doğrulama .

SANAT özellikleri

ART tarafından uygulanan önemli özelliklerden bazıları şunlardır.

Vaktinden önce (AOT) derleme

ART, uygulama performansını artırabilecek önceden hazırlanmış (AOT) derlemeyi sunar. ART ayrıca Dalvik'ten daha sıkı kurulum süresi doğrulamasına sahiptir.

Yükleme sırasında ART, uygulamaları cihazdaki dex2oat aracını kullanarak derler. Bu yardımcı program, DEX dosyalarını girdi olarak kabul eder ve hedef aygıt için çalıştırılabilir derlenmiş bir uygulama oluşturur. Yardımcı program tüm geçerli DEX dosyalarını zorluk yaşamadan derleyebilmelidir. Ancak bazı işlem sonrası araçlar, Dalvik tarafından tolere edilebilecek ancak ART tarafından derlenemeyecek geçersiz dosyalar üretir. Daha fazla bilgi için bkz. Çöp Toplama Sorunlarının Ele Alınması .

Geliştirilmiş çöp toplama

Çöp toplama (GC) çok kaynak yoğun bir işlemdir ve bu durum uygulamanın performansını olumsuz etkileyebilir, bu da kararsız görüntüye, zayıf kullanıcı arayüzü duyarlılığına ve diğer sorunlara yol açabilir. ART, çöp toplama işlemini çeşitli şekillerde geliştirir:

  • Tek bir GC duraklaması ile çoğunlukla eşzamanlı tasarım
  • Arka planda bellek kullanımını ve parçalanmayı azaltmak için eşzamanlı kopyalama
  • GC duraklamasının uzunluğu yığın boyutundan bağımsızdır
  • Yakın zamanda tahsis edilen, kısa ömürlü nesnelerin temizlenmesi gibi özel bir durum için daha düşük toplam GC süresine sahip toplayıcı
  • Eş zamanlı çöp toplama işlemlerini daha zamanında hale getiren iyileştirilmiş çöp toplama ergonomisi, tipik kullanım durumlarında GC_FOR_ALLOC olaylarının son derece nadir olmasını sağlar

Geliştirme ve hata ayıklama iyileştirmeleri

ART, uygulama geliştirmeyi ve hata ayıklamayı geliştirmek için bir dizi özellik sunar.

Örnekleme profili oluşturucu desteği

Geçmişte, geliştiriciler profil oluşturucu olarak Traceview aracını (uygulama yürütmeyi izlemek için tasarlanmıştır) kullanmışlardır. Traceview faydalı bilgiler verirken, Dalvik'teki sonuçları yöntem çağrısı başına ek yük nedeniyle çarpıktır ve aracın kullanımı çalışma süresi performansını gözle görülür şekilde etkiler.

ART, bu sınırlamalara sahip olmayan özel bir örnekleme profili oluşturucu için destek ekler. Bu, önemli bir yavaşlama olmadan uygulamanın yürütülmesine ilişkin daha doğru bir görünüm sağlar. KitKat sürümünde Dalvik için Traceview'e örnekleme desteği eklendi.

Daha fazla hata ayıklama özelliği desteği

ART, özellikle monitör ve çöp toplamayla ilgili işlevlerde bir dizi yeni hata ayıklama seçeneğini destekler. Örneğin şunları yapabilirsiniz:

  • Yığın izlerinde hangi kilitlerin tutulduğunu görün, ardından kilidi tutan iş parçacığına atlayın.
  • Belirli bir sınıfın kaç canlı örneğinin olduğunu sorun, örnekleri görmeyi isteyin ve bir nesneyi hangi referansların canlı tuttuğunu görün.
  • Belirli bir örnek için olayları (kesme noktası gibi) filtreleyin.
  • Bir yöntemden çıkıldığında döndürülen değeri görün ("method-exit" olaylarını kullanarak).
  • Belirli bir alana erişildiğinde ve/veya değiştirildiğinde bir programın yürütülmesini askıya almak için saha izleme noktasını ayarlayın.

İstisnalar ve kilitlenme raporlarında iyileştirilmiş teşhis ayrıntıları

ART, çalışma zamanı istisnaları oluştuğunda size mümkün olduğunca fazla bağlam ve ayrıntı sunar. ART, java.lang.ClassCastException , java.lang.ClassNotFoundException ve java.lang.NullPointerException için genişletilmiş istisna ayrıntıları sağlar. (Dalvik'in sonraki sürümleri java.lang.ArrayIndexOutOfBoundsException ve java.lang.ArrayStoreException için artık dizinin boyutunu ve sınır dışı uzaklığı içeren genişletilmiş istisna ayrıntıları sağladı ve ART bunu da yapıyor.)

Örneğin, java.lang.NullPointerException artık uygulamanın yazmaya çalıştığı alan veya çağırmaya çalıştığı yöntem gibi uygulamanın boş işaretçiyle ne yapmaya çalıştığıyla ilgili bilgileri gösteriyor. İşte bazı tipik örnekler:

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 ayrıca, hem Java hem de yerel yığın bilgilerini dahil ederek uygulama yerel kilitlenme raporlarında gelişmiş bağlam bilgileri sağlar.

Sorunları bildir

Uygulama JNI sorunlarından kaynaklanmayan herhangi bir sorunla karşılaşırsanız bunları Android Açık Kaynak Projesi Sorun İzleyici aracılığıyla bildirin. Bir adb bugreport ekleyin ve varsa Google Play mağazasındaki uygulamanın bağlantısını ekleyin. Aksi takdirde mümkünse sorunu yeniden oluşturan bir APK ekleyin.