Android düşük bellek sonlandırıcı (LMK) arka plan programı, çalışan bir Android sisteminin bellek durumunu izler ve en az gerekli işlemleri sonlandırarak yüksek bellek kullanımına tepki verir. Android vitals, kullanıcılarınızı etkileyen bellek baskısı sorunlarını tespit etmenize yardımcı olmak için Google Play Console'da kullanıcı tarafından algılanan LMK sonlandırmalarını izler ve raporlar.
Android vitals'da LMK metriği
Android vitals, uygulamanızın LMK oranını izlemenize ve iyileştirmenize yardımcı olabilir. Android vitals yalnızca bir LMK oranını ölçer: Kullanıcı tarafından algılanan LMK oranı.
Bu metrik, günlük etkin kullanıcı sayınız arasında kullanıcı tarafından algılanan en az bir LMK yaşayanların yüzdesini gösterir. Kullanıcı tarafından algılanan LMK, kullanıcı tarafından fark edilmiş olması muhtemel LMK'lerdir. Örneğin, uygulamanızın bir etkinlik görüntülediği veya ön plan hizmeti olarak çalıştığı anlarda gerçekleşen LMK'lar buna örnek gösterilebilir. Bu sonlandırmalar, işlemin hemen ve düzgün olmayan bir şekilde sonlandırılmasına neden olur. Son kullanıcı, uygulamanın kilitlendiğini görür. Bu durum genellikle standart yaşam döngüsü durum kaydetme mekanizmalarını atlar ve kullanıcının ilerleme durumunun kaybolmasına neden olur.
Android vitals, bellek yönetimi sorunları için yüksek doğruluklu bir proxy görevi gördüğünden bu işlem sonlandırmalarına odaklanır. %1'in üzerindeki bir LMK oranı, acil işlem yapılması gerektiğini gösterir. Ancak LMK oranının düşük olması, uygulamanın bellek kullanımının sağlıklı olduğu anlamına gelmez. Bu düşük oran, LMK daemon'un arka plandaki işlemleri sık sık sonlandırdığı anlamına gelebilir. Bu da "sıcak başlatma" performansını ve çoklu görev akıcılığını olumsuz etkiler.
Bu metriği Android vitals'ın Kararlılık bölümünde bulabilirsiniz:
ANR'ler ve kilitlenmeler gibi benzer önemli verilerde olduğu gibi metrikleri filtreleyebilir, metriklerinizi benzerlerinizle karşılaştırabilir veya metrikteki değişimi uzun bir süre boyunca (3 yıla kadar) izleyebilirsiniz. Mevcut uygulamalarla ilgili veriler 28 Ocak 2025'ten itibaren kullanılabilir.
Düşük bellek sonlandırıcı arka plan programının işleyiş şekli
Android platformu, boş belleğin boşa harcanan bellek olduğu varsayımıyla çalışır. Android, her zaman kullanılabilir tüm belleği kullanmaya çalışır. Örneğin, sistem uygulamaları kapatıldıktan sonra bellekte tutar. Böylece kullanıcı, uygulamalara hızlıca geri dönebilir. Bu nedenle, Android cihazlar genellikle çok az boş bellekle çalışır (İşlemler arasında bellek ayırma bölümüne bakın).
Düşük bellek sonlandırıcı (LMK) arka plan programı, boş bellek azaldığında hangi işlemin sonlandırılacağına karar vermek için oom_adj_score adlı yetersiz bellek puanını kullanarak çalışan işlemlere öncelik verir. Yüksek puana sahip işlemler ilk olarak sonlandırılır. Önce arka plan uygulamaları, en son da sistem işlemleri sonlandırılır. Aşağıdaki tabloda, LMK puanlama kategorileri yüksekten düşüğe doğru listelenmiştir.
İlk satırdaki en yüksek puanlı kategoride yer alan öğeler ilk olarak sonlandırılır:
Bellek profili oluşturma araçları
Aşağıdaki araçlar, bellek sorunlarını bulmanıza ve teşhis etmenize yardımcı olabilir:
- Uygulamanızın zaman içinde nasıl bellek ayırdığını görün. Uygulamanızın ne kadar bellek kullandığını, ayrılan Java nesnelerinin sayısını ve çöp toplamanın ne zaman gerçekleştiğini gösteren gerçek zamanlı bir grafik görebilirsiniz.
- Uygulamanız çalışırken çöp toplama etkinliklerini başlatın ve Java yığınının anlık görüntüsünü alın.
- Uygulamanızın bellek ayırmalarını kaydedin, ayrılan tüm nesneleri inceleyin ve her ayırma için yığın izlemeyi görüntüleyin.
Oyununuz yerel bir motorda çalışıyorsa yerel bellek ayırma hatalarını ayıklamak için HWAddress Sanitizer'ı kullanın.
Android Studio Memory Profiler
Android Studio, Android Profiler'ın bir bileşeni olarak Memory Profiler'ı sunar. Bu araç, takılmalara, donmalara ve hatta uygulama kilitlenmelerine yol açabilecek bellek sızıntılarını ve bellek karmaşıklığını tespit etmenize yardımcı olur. Profil oluşturucu, uygulamanızın bellek kullanımının gerçek zamanlı grafiğini gösterir ve yığın dökümü almanıza, çöp toplamayı zorunlu kılmanıza ve bellek ayırmayı izlemenize olanak tanır.
Unity bellek profili oluşturma araçları
Uygulamalarınızı oluşturmak için Unity Engine kullanıyorsanız Unity bellek profili oluşturma kılavuzunu inceleyebilirsiniz. Unity, uygulamanızın Unity'deki bellek kullanımını analiz etmek için iki araç sunar.
Bunlardan ilki, uygulamanızın belleği nerede kullandığı hakkında temel bilgiler veren yerleşik bir profil oluşturucu olan Memory Profiler modülüdür.
İkinci araç, projenize ekleyebileceğiniz bir Unity paketi olan Memory Profiler paketidir. Paket, Unity Editor'a ek bir Memory Profiler penceresi ekler. Memory Profiler, uygulamanızdaki bellek kullanımını daha ayrıntılı bir şekilde analiz etmenize olanak tanır. Bellek sızıntılarını bulmak için anlık görüntüleri depolayıp karşılaştırabilir veya bellek parçalanması sorunlarını bulmak için bellek düzenini görebilirsiniz.
Android'e özel Unity iş akışları için Unity araçlarıyla bellek kullanımını kontrol etme, Unity'de bellek kullanımını optimize etme ve Unity oyunları için LMK'larda hata ayıklama başlıklı makalelere bakın.
Unreal Memory Insights
Unreal Engine ile geliştirilen uygulamalar, bellek ayırma ve ayırmayı kaldırma hakkında ayrıntılı bilgi (ör. bellek bloklarıyla ilişkili alt düzey bellek (LLM) etiketleri ve çağrı yığınları) görmek için Unreal Memory Insights'ı kullanabilir.
Memory Insights sorgu sistemi, herhangi bir zamanda canlı ayırmaları bulabilir, bellek kullanımındaki değişiklikleri belirleyebilir, bellek sızıntılarını tespit edebilir ve kısa vadeli ayırmaları uzun vadeli ayırmalardan ayırt edebilir.
UE 5.4'ten itibaren Memory Insights, Android projeleri için çağrı yığınlarıyla bellek izlemeyi destekler.
Android'e özel Unreal iş akışları için Unreal ile bellek kullanımını kontrol etme ve Unreal'da bellek kullanımını optimize etme başlıklı makaleleri inceleyin.
Düşük bellek analizleri
Android, oyununuzun bellek kullanımını azaltmanıza ve önceki oyun oturumlarının neden sonlandırıldığını belirlemenize olanak tanıyan geri çağırmalar ve API'ler sağlar.
Geri çağırma işlevleri
Kullanımdan kaldırılan trim geri çağırmaları için kaydolmayın. Android, sistem belleği geri almadan önce yerel bellek baskısı etkinliklerini algılamak için API'ler sağlamaz ve ayrıntılı çalışan bellek kırpma geri çağırmaları (TRIM_MEMORY_RUNNING_*), düşük bellek sonlandırmalarını önlemede etkili olmamıştır.
Bu nedenle Android, TRIM_MEMORY_UI_HIDDEN ve TRIM_MEMORY_BACKGROUND dışındaki tüm kırpma seviyelerini kullanımdan kaldırdı. Oyununuz arka plana geçtiğinde kullanıcı arayüzünü ve yardımcı kaynakları serbest bırakmak için bu geri çağırmaları veya Unity'nin OnApplicationPause ve Unreal'ın ApplicationWillEnterBackgroundDelegate gibi motor yaşam döngüsü eşdeğerlerini kullanın. Uygulama ayrıntıları için Oyunlarda bellek kullanımını azaltma başlıklı makaleyi inceleyin.
Oyunun sonlandırılması
Android, uygulama ve oyunların hızlı yüklenmesini sağlamak (kullanıcı deneyimini iyileştirmek) için tüm kullanılabilir belleği kullanarak bunları önbelleğe almaya çalışır. Ancak bellek sınırlı hale geldiğinde sistem, cihazın normal çalışması için bellek açmak amacıyla en çok bellek kullanan uygulama ve oyunları kapatır.
Oyunlarda daha iyi bellek kullanımı elde etmenize yardımcı olacak bilgiler, analizler ve en iyi uygulamalar şunlardır:
ApplicationExitInfokullanın: Bu API, önceki oyun oturumunun Android sistemi tarafından sonlandırılma nedenini döndürür. Önceki bir işlem çıkışının nedeni olarak düşük bellek (REASON_LOW_MEMORY) veya bellek sınırlayıcı sonlandırmaları (REASON_MEMORY_LIMITER) olup olmadığını kontrol etmek içinApplicationExitInfokullanın (Oyunlar için ApplicationExitInfo bölümüne bakın). Oyunun bellek baskısı nedeniyle sonlandırılıp sonlandırılmadığını kontrol edin. Böylece oyun, söz konusu cihazda daha az bellek kullanacak şekilde optimize edilebilir.- Toplam fiziksel RAM'e bakın: Oyunların ön plandayken sonlandırılmasını önlemek ve cihazın özellikleriyle eşleştirmek için her cihazın toplam fiziksel RAM'ine bakarak oyunun bellek kullanımını buna göre ayarlayın. Amaç, uygulamaların arka plana geçtikten kısa bir süre sonra sonlandırılmasını önlemekse (oyuncunun çoklu görev yapmasına izin vermek için) oyununuzun bellek kullanımını azaltmak amacıyla trim geri çağırmalarını (özellikle
TRIM_MEMORY_UI_HIDDEN) kullanın.
Ek kaynaklar
- Oyunlar için bellek yönetimi hakkında
- Oyunlarda bellek kullanımını izleme
- Oyunlarda bellek kullanımını azaltma
- Bellek yönetimine genel bakış