Bu örnekler, belirli performans problemlerini ölçmek ve iyileştirmek için bellek profili oluşturmanın yanı sıra Makrobenchmark ile sistem izlemenin nasıl kullanılacağını gösterir.
Systrace kullanarak uygulama başlatmada hata ayıklama
Başlatma süresinde hata ayıklarken systrace günlüklerini kullanmanızı öneririz. Systrace, belirli etkinliklerin ne kadar süreceğine dair çıktıları almak için önceden donatılmış kod kullanan bir sistemdir. Bu izleri kullanarak uygulamanızda ve hatta sistemdeki diğer işlemlerde neler olduğunu görebilirsiniz. Android platformu ve Jetpack kitaplıkları, bir uygulamadaki birçok önemli etkinlikle ilgili araçlara sahiptir ve bunlar uygun şekilde günlüğe kaydedilir. Ayrıca, uygulamalarınıza kendi özel izlerinizi de ekleyebilirsiniz. Bu izler, uygulamada ne olduğuna dair genel bir resim sunmak için aynı sistem görselleştirme araçlarında gösterilir.
Systrace veya Perfetto kullanma
Temel systrace kullanımı hakkında daha fazla bilgi için şu videoyu izleyin: Uygulama Performansında Hata Ayıklama.
Başlatma süresini analiz etmek için öncelikle başlatma sırasında neler olduğunu anlamanız gerekir. Bu sayfada açıklananlardan daha fazla bilgi istiyorsanız Uygulama başlatma süresiyle ilgili belgelerden uygulama başlatma işlemine genel bir bakış sunulur.
Uygulama başlatma aşamaları şunlardır:
- Süreci başlatma
- Genel uygulama nesnelerini başlatma
- Etkinlik oluşturma ve başlatma
- Düzeni büyüt
- İlk kareyi çizin
Startup türleri aşağıdaki aşamalardan oluşur:
- Baştan başlatma: Uygulama, başlatıldıktan sonra ilk kez başlatıldığında veya uygulama işlemi kullanıcı ya da sistem tarafından sonlandırıldığında gerçekleşir. Başlangıç, kaydedilmiş durum olmadan yeni bir işlem oluşturur.
- Hazır durumda başlatma: Bu, uygulama arka planda çalışırken ancak etkinliğin yeniden oluşturulması ve ön plana getirilmesi gerektiğinde ortaya çıkar. Etkinlik, mevcut işlem yeniden kullanılırken veya kaydedilmiş durumla yeniden oluşturulur. Makrobenchmark test kitaplığı, ilk seçeneği kullanarak tutarlı hazır durumda başlatma testini destekler.
- Çalışırken başlatma: Bu durum, süreç ve etkinlik devam ederken yalnızca ön plana çıkarılmak, gerektiğinde bazı nesnelerin yeniden oluşturulması ve yeni ön plan etkinliğinin oluşturulması gerektiğinde ortaya çıkar. Bu, en kısa startup senaryosudur.
İzleri, Geliştirici Seçenekleri'nde bulunan cihaz üzerinde sistem izleme uygulamasını kullanarak kaydetmenizi öneririz. Komut satırı araçlarını kullanmak istiyorsanız Perfetto, Android 10 (API düzeyi 29) ve sonraki sürümlerle kullanılabilir. Önceki sürümlerdeki cihazlarda ise systrace.
Uygulamaların ilk etkinliği oluşturduktan sonra başlatma şekillerinde önemli farklılıklar olabileceğinden "ilk kare" teriminin biraz yanlış bir ad olduğunu unutmayın. Bazı uygulamalar birkaç kare için şişirmeye devam ederken diğerleri hemen ikincil bir etkinlik olarak başlatılır.
Mümkün olduğunda, uygulama açısından başlatma tamamlandığında bir reportFullyDrawn
araması (Android 10 ve sonraki sürümlerde kullanılabilir) eklemenizi öneririz.
Bu sistem izlerinde bakmanız gerekenler:
Şekil 4'te, aynı anda G/Ç gerçekleştiren diğer işlemlerin G/Ç çakışmasına neden olabileceğini unutmayın. Bu nedenle, diğer işlemlerin çalışmadığından emin olun.
Diğer iş parçacıklarındaki önemli etkinlikler, kullanıcı arayüzü iş parçacığını etkileyebilir. Bu nedenle, başlatma sırasında arka plan çalışmasına dikkat edin. Cihazların farklı CPU yapılandırmalarına sahip olabileceğini, bu nedenle paralel olarak çalışabilecek iş parçacıklarının sayısının cihazlara göre değişebileceğini unutmayın.
Yaygın duraklama kaynakları ile ilgili kılavuza da göz atın.
Android Studio bellek profil aracını kullanma
Android Studio bellek profil aracı, bellek sızıntıları veya kötü kullanım kalıplarından kaynaklanabilecek bellek baskısını azaltmak için güçlü bir araçtır. Nesne ayırma ve koleksiyonlarının canlı görünümünü sağlar.
Uygulamanızdaki bellek sorunlarını düzeltmek amacıyla, çöp toplama işleminin neden ve ne sıklıkta gerçekleştiğini, ayrıca yığınınızın zaman içinde sürekli olarak artmasına neden olan olası bellek sızıntıları olup olmadığını izlemek için bellek profil aracını kullanabilirsiniz.
Uygulama belleğinin profili oluşturma işlemi aşağıdaki adımlara bölünür:
1. Bellek sorunlarını algılama
Bellek sorunlarını tespit etmek üzere önce uygulamanız için bellek profili oluşturma oturumu kaydedin. Ardından, bellek ayak izi artan bir nesne arayın. Bu nesne sonunda bir çöp toplama etkinliğini tetikler.
Şekil 6. Atık toplama etkinliklerini gösteren bellek profil aracı.{.:image-caption}
Bellek baskısına neden olan bir kullanım alanı belirledikten sonra temel nedenleri analiz etmeye başlayın.
2. Bellek baskısı etkin noktalarını teşhis etme
Hem ayırmaları hem de yüzeysel boyutu görselleştirmek için zaman çizelgesinde bir aralık seçin.
Bu verileri sıralamanın birden çok yolu vardır. Aşağıdaki bölümlerde, her bir görünümün sorunları analiz etmenize nasıl yardımcı olabileceğine dair bazı örnekler sunulmaktadır.
Sınıfa göre düzenle
Sınıfa göre düzenleme, başka bir şekilde önbelleğe alınması veya bir bellek havuzundan yeniden kullanılması gereken nesneler oluşturan sınıflar bulmak istediğinizde yararlıdır.
Örneğin, her saniyede “Vertex” adında 2.000 sınıf nesne oluşturan bir uygulama gördüğünüzü düşünün. Bu,ayırma sayısını saniyede 2.000 artırır ve sınıfa göre sıralama yaparken bunu görürsünüz. Bu tür atıklar oluşturmamak için bu tür nesneler tekrar kullanılmalı mı? Cevap evetse muhtemelen bir bellek havuzu uygulanması gerekecektir.
Çağrı yığınına göre düzenle
Çağrı yığınına göre düzenleme, belleğin ayrıldığı yoğun bir yol (ör. bir döngünün içinde ya da çok miktarda ayırma işi yapan belirli bir işlev) olduğunda yararlıdır. Çağrı yığınına göre görüntülemek bu ayırma hotspot'larını görmenize olanak tanır.
Derin ve tutulan boyut karşılaştırması
Sığ boyut, yalnızca nesnenin kendi belleğini izler. Bu nedenle, en çok temel öğelerden oluşan basit sınıfları izlemek için yararlıdır.
Tutulan boyut, doğrudan nesne tarafından ayrılan toplam belleğin yanı sıra yalnızca nesne tarafından referans verilen diğer nesneleri de gösterir. Yalnızca temel alanların değil, diğer nesnelerin de ayrılmasını gerektiren karmaşık nesneler nedeniyle bellek basıncını izlemek için yararlıdır. Bu değeri elde etmek için bellek profil aracını kullanarak bir bellek dökümü oluşturun. Bu yığında ayrılan nesneler ekrana eklenir.
3. Optimizasyonun etkisini ölçme
Ölçülmesi kolay bir bellek optimizasyonu iyileştirmesi de çöp toplamadır. Optimizasyon, bellek baskısını azalttığında daha az çöp toplama (GC) görmeniz gerekir. Bunu ölçmek için profil oluşturucu zaman çizelgesindeki GC'ler arasındaki süreyi ölçün. Bellek optimizasyonlarından sonra GC'ler arasında daha uzun süreler görmeniz gerekir.
Aşağıdakiler gibi bellek iyileştirmelerinin nihai etkisi:
- Uygulama sürekli bellek baskısına sahip değilse Yetersiz Bellek sorunları nedeniyle daha az kapatılır.
- Daha az GC'ye sahip olmak, olumsuzluk metriklerini iyileştirir. Bunun nedeni, GC'lerin CPU anlaşmazlığına yol açması ve bu nedenle, GC gerçekleşirken oluşturma görevlerinin ertelenmesine yol açabilmesidir.
Sizin için önerilenler
- Not: Bağlantı metni JavaScript kapalıyken gösterilir
- Makro karşılaştırma metriklerini yakalama
- Uygulama başlatma analizi ve optimizasyonu {:#app-startup-analysis-optimization}