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 önceki sürüm Dalvik, başlangıçta özel olarak Android projesi için oluşturulmuştur. Çalışma zamanı olarak ART, Dalvik yürütülebilir (DEX) biçimini ve DEX bayt kodu spesifikasyonunu yürütür.
ART ve Dalvik, DEX bayt kodunu çalıştıran uyumlu çalışma zamanları olduğundan Dalvik için geliştirilen uygulamalar ART ile çalıştırıldığında çalışmalıdır. Ancak Dalvik'te çalışan bazı teknikler ART'te çalışmaz. En önemli sorunlar hakkında bilgi edinmek için Android çalışma zamanında (ART) uygulama davranışını doğrulama başlıklı makaleyi inceleyin.
ART özellikleri
ART tarafından uygulanan önemli özelliklerden bazıları aşağıda verilmiştir.
Önceden derleme (AOT)
ART, uygulama performansını artırabilecek önceden derleme (AOT) özelliğini kullanıma sunar. ART, yükleme sırasındaki doğrulamayı Dalvik'ten daha sıkı şekilde gerçekleştirir.
ART, yükleme sırasında uygulamaları cihaz üzerindeki dex2oat aracını kullanarak derleyebilir. Bu yardımcı program, giriş olarak DEX dosyalarını kabul eder ve hedef cihaz için derlenmiş bir uygulama yürütülebilir dosyası oluşturur. Yardımcı program, tüm geçerli DEX dosyalarını sorunsuz bir şekilde derleyebilmelidir. Ancak bazı son işlem araçları, Dalvik tarafından tolere edilebilecek ancak ART tarafından derlenemeyen geçersiz dosyalar oluşturur. Daha fazla bilgi için Çöp Toplama Sorunlarını Çözme başlıklı makaleyi inceleyin.
İyileştirilmiş atık toplama
Çöp toplama (GC), çok fazla kaynak kullanan bir işlemdir. Bu işlem, uygulamanın performansını düşürerek görüntünün kesintili olmasına, kullanıcı arayüzünün yanıt vermesinin yavaşlamasına ve diğer sorunlara neden olabilir. ART, çöp toplamayı birkaç şekilde iyileştirir:
- Tek bir GC duraklatması ile çoğunlukla eşzamanlı tasarım
- Arka plan bellek kullanımını ve parçalanmayı azaltmak için eşzamanlı kopyalama
- GC duraklatmasının uzunluğu yığın boyutundan bağımsızdır
- Yakın zamanda ayrılmış, kısa ömürlü nesneleri temizleme özel durumu için daha düşük toplam GC süresine sahip toplayıcı
- Atık toplama ergonomisi iyileştirildi. Bu sayede eşzamanlı atık toplama işlemleri daha zamanında gerçekleşir. Bu da
GC_FOR_ALLOC
etkinliklerinin tipik kullanım alanlarında son derece nadir olmasını sağlar.
Geliştirme ve hata ayıklama iyileştirmeleri
ART, uygulama geliştirme ve hata ayıklama işlemlerini iyileştirmek için çeşitli özellikler sunar.
Örnekleme profil aracı için destek
Geliştiriciler daha önce Traceview aracını (uygulama yürütme işlemini izlemek için tasarlanmıştır) profilleyici olarak kullanıyordu. Traceview faydalı bilgiler sağlar ancak Dalvik'teki sonuçları, yöntem çağrısı başına ek maliyet nedeniyle saptırılmıştır ve aracın kullanımı çalışma zamanı performansını belirgin şekilde etkiler.
ART, bu sınırlamalara sahip olmayan özel bir örnekleme profilleyicisi için destek ekler. Bu sayede, önemli bir yavaşlama olmadan uygulama yürütme işlemine dair daha doğru bir görünüm elde edersiniz. KitKat sürümünde Dalvik için Traceview'a örnekleme desteği eklendi.
Daha fazla hata ayıklama özelliği için destek
ART, özellikle de monitör ve çöp toplama ile ilgili işlevlerde bir dizi yeni hata ayıklama seçeneğini destekler. Örneğin, şunları yapabilirsiniz:
- Yığın izlemelerinde hangi kilitlerin tutulduğunu görebilir, ardından kilit tutan iş parçacığına atlayabilirsiniz.
- Belirli bir sınıfın kaç canlı örneği olduğunu sorun, örnekleri görmeyi isteyin ve bir nesnenin canlı kalmasını sağlayan referansları görün.
- Belirli bir örnek için etkinlikleri (ör. kesme noktası) filtreleyin.
- Bir yöntem sona erdiğinde döndürdüğü değeri görebilirsiniz ("method-exit" etkinliklerini kullanarak).
- Belirli bir alana erişildiğinde ve/veya alan değiştirildiğinde bir programın yürütülmesini askıya almak için alan izleme noktası ayarlayın.
İstisnalar ve kilitlenme raporlarındaki teşhis ayrıntıları iyileştirildi
ART, çalışma zamanında istisna oluştuğunda mümkün olduğunca fazla bağlam ve ayrıntı sağlar. 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 genişletilmiş istisna ayrıntıları sağladı. Bu ayrıntılar artık dizinin boyutunu ve dizi dışı ofseti içeriyor. ART da bunu yapıyor.)
Örneğin, java.lang.NullPointerException
artık uygulamanın boş işaretçiyle ne yapmaya çalıştığıyla ilgili bilgileri (ör. uygulamanın yazmaya çalıştığı alan veya çağırmaya çalıştığı yöntem) gösterir. Aşağıda tipik birkaç örnek verilmiştir:
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, hem Java hem de yerel yığın bilgilerini ekleyerek uygulama yerel kilitlenme raporlarında daha iyi bağlam bilgileri de sağlar.
Sorunları bildirme
Uygulama JNI sorunlarından kaynaklanmayan sorunlarla karşılaşırsanız bunları Android Açık Kaynak Projesi Sorun Takip Aracı üzerinden bildirin. Bir adb bugreport
ekleyin ve varsa Google Play Store'daki uygulamanın bağlantısını sağlayın. Aksi takdirde, mümkünse sorunun yeniden üretildiği bir APK ekleyin.