Bellek kullanımı (anonim RSS + takas)

Bellek kullanımı (anonim RSS + takas), uygulamanızın bellek kullanımını yansıtan bir metriktir.

Anonim bellek, depolama alanındaki bir dosya tarafından desteklenmeyen bellektir. Örneğin, yığın ayırmaları ve mmap ile ayrılan bellek. Bu, Java veya Kotlin yığını, yönetilmeyen yerel yığın ayırmaları (Bitmap piksel verilerinin Android 8.0 (API düzeyi 26) ve sonraki sürümlerde bulunduğu yerler) ve iş parçacığı yürütme yığınları dahil olmak üzere uygulamanızın dinamik bellek ayırmalarını yakalar. İşletim sistemi, baskı altında dosya destekli belleği bırakabilir ancak anonim belleği bırakamaz.

Yerleşik Küme Boyutu (RSS), bir işlem tarafından kullanılan ve fiziksel RAM'de tutulan toplam bellek sayfası sayısıdır (hem paylaşılan hem de paylaşılmayan). Bir sayfaya birden fazla işlem (ör. aynı kitaplığa erişen uygulamalar) tarafından erişiliyorsa bu sayfa "paylaşılan" olarak kabul edilir.

Anonim bellek için sistem, bellek baskı altındayken sayfaları takas alanına (veya Android'de zRAM) yazabilir. Gerekirse sistem bu sayfaları takas alanından geri okuyabilir.

Toplam bellek kullanımı (anonim RSS + takas), uygulamanızın depolama alanında bir dosya tarafından desteklenmeyen toplam bellek sayfası sayısının bir ölçüsüdür. Sistem tarafından takasta da saklanan tüm bellekleri içerir. Anonim RSS + takas izleme, uygulamanızın gerçek ve çıkarılamayan bellekte kaplanan yerini görmenizi sağlar.

Uygulamanızın bellek kullanımı yüksekse bu sayfadaki yönergeleri kullanarak sorunu daha ayrıntılı bir şekilde inceleyin ve düzeltin.

Kaynaklar

Aşırı bellek kullanımını yerel olarak teşhis etme

Aşırı bellek kullanımının kaynağını teşhis etmeye başlamak için geliştirici ayarlarında, Android Studio'da veya Perfetto'da Yığın dökümü kaydet'i kullanarak yığın dökümü yakalayabilirsiniz. Uygulamanızın temel kullanıcı yolculuklarını test ettikten sonra yerel olarak bir yığın dökümü yakalayarak başlamanızı öneririz.

Özellikle aşağıdaki kullanıcı yolculuklarını test etmenizi öneririz:

  • Web görünümleri ve uygulama içi tarayıcı oturumları
  • Medya ağırlıklı sonsuz kaydırma
  • Öğe oluşturma ve düzenleme akışları

Olası bellek sızıntılarını araştırmak için ilgili kullanıcı yolculuklarını yerel olarak çalıştırın ve uygulamanın arka plana alındıktan sonra belleği serbest bırakıp bırakmadığını doğrulamak için farklı işlem durumlarında (görünür, ön plan hizmeti ve önbelleğe alınmış) yığın dökümleri toplayın. Bu işlem durumlarının onTrimMemory geri çağırmalarla nasıl ilişkili olduğunu anlamak için etkinliklere yanıt olarak belleği serbest bırakma ile ilgili kılavuza bakın.

Android Studio Profiler'ı kullanarak bellek sorunlarını ayıklıyorsanız LeakCanary entegrasyonunu kullanarak bellek sızıntısı ve yinelenen bit eşlem algılamayı kolaylaştırabilir, resim kullanımınızı optimize edebilirsiniz.

Yığın dökümünü topladıktan sonra, yığın dökümünü analiz etmek ve yüksek bellek kullanımının olası kaynaklarını belirlemek için Android profiler becerisini kullanmanızı öneririz.

Yapay zeka becerilerinin verebileceği yanıtlara dair bir örneği aşağıda bulabilirsiniz:

I have completed the analysis of memory leaks and bitmap issues for [app] using the provided Perfetto trace.
  Summary of Findings
  The investigation identified a critical memory pressure issue caused by massive bitmap retention within the app process.
...
Recommendations for [app]
   1. [Library] Image Cache Optimization:
       * Review the [Library] caching strategy. Ensure that bitmaps
         loaded for animations are released or downsampled when the animation is
         not in the foreground.
   2. Asset Resolution Audit:
       * The 14.7 MB average size suggests full-screen or extremely high-density assets. Audit the [library] files in the native_home component to ensure they are not using unnecessarily large source images.
   3. View Lifecycle Management:
       * Investigate why 21 [LibraryImage] instances are alive simultaneously. Ensure that views in the bottom
      tab are properly detached or their animations are cleared when switching between tabs.
   4. Fix Surface Leaks:
       * Address the Surface.release failures observed in the logs, as these can lead to both memory leaks and
         native resource exhaustion.

Yığın dökümlerini yorumlama ile ilgili ek kaynaklar

Aşağıdaki kaynaklarda yığın dökümlerinin yorumlanması ve bellek kullanımında hata ayıklama hakkında daha fazla bilgi verilmektedir:

  • Manuel analiz: Perfetto kullanıcı arayüzünde yığın dökümü görselleştirmelerinde nasıl gezineceğinizi ve bunları nasıl yorumlayacağınızı öğrenmek için Perfetto Yığın Dökümü Gezgini kılavuzunu kullanın.
  • Java/Kotlin ayırmaları: Android Çalışma Zamanı (ART) yığın dökümlerini analiz etme konusunda adım adım açıklamalı kılavuz için İlk ART yığın dökümünüzü görselleştirme başlıklı makaleyi inceleyin.
  • Yerel ayırmalar: Yerel (C/C++) bellek profillerinin nasıl toplanacağını ve analiz edileceğini öğrenmek için Perfetto Native Profiling belgelerine bakın.
  • CLI incelemesi: Uygulamanızın bir cihazdaki bellek kullanımının hızlı bir dökümünü almak için adb dumpsys meminfo komutunu kullanın.

Bellek kullanımını iyileştirme

Uygulamanızın bellek kullanımını iyileştirme hakkında daha fazla bilgi edinmek için aşağıdaki bölümlere göz atın:

Bellek sorunlarını düzeltme hakkında ayrıntılı bilgi için Uygulamanızın belleğini yönetme rehberine bakın.