Android platformu, boş belleğin boşa harcanmış bellek olduğu varsayımıyla çalışır. Android, her zaman mevcut tüm belleği kullanmaya çalışır. Örneğin, sistem uygulamaları kapatıldıktan sonra bellekte tutar. Böylece kullanıcılar uygulamalara hızlıca geri dönebilir. Bu nedenle, Android cihazlar genellikle çok az boş bellekle çalışır (Android bellek ayırma hakkında bilgi için buraya bakın).
Android düşük bellek sonlandırıcı (LMK) daemon işlemi, çalışan bir Android sisteminin bellek durumunu izler ve sistemin kabul edilebilir düzeyde performans göstermesini sağlamak için en az gerekli işlemleri sonlandırarak yüksek bellek kullanımına tepki verir.
LMK daemon'ı, hangi işlemin sonlandırılacağına karar vermek için çalışan işlemlere öncelik vermek üzere oom_adj_score adlı bir bellek yetersiz puanı kullanır. Yüksek puanlı işlemler önce sonlandırılır. Önce arka plandaki uygulamalar, en son sistem işlemleri sonlandırılır. Aşağıdaki tabloda, LMK puanlama kategorileri yüksekten düşüğe doğru listelenmiştir. Birinci satırdaki en yüksek puanlı kategorideki öğeler önce sonlandırılır:
Bellek kullanımının profilini çıkarma araçları
Aşağıdaki araçlar, bellek sorunlarını bulup teşhis etmenize yardımcı olabilir:
- Uygulamanızın zaman içinde belleği nasıl tahsis ettiğini görün. Uygulamanızın kullandığı bellek miktarı, ayrılan Java nesnelerinin sayısı ve atık toplama işleminin ne zaman gerçekleştiğiyle ilgili gerçek zamanlı bir grafik görebilirsiniz.
- Atık toplama etkinliklerini başlatın ve uygulamanız çalışırken 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ırmada hata ayıklamak için HWAddress Sanitizer'ı kullanın.
Android Studio Memory Profiler
Android Studio, Android Profiler'ın bir bileşeni olarak Bellek Profil Aracı'nı sunar. Bu araç, takılmaya, donmaya ve hatta uygulama kilitlenmelerine yol açabilecek bellek sızıntılarını ve bellek değişimini belirlemenize yardımcı olur. Profil aracı, uygulamanızın bellek kullanımının gerçek zamanlı grafiğini gösterir. Ayrıca, yığın dökümü yakalamanıza, atık toplama işlemini zorlamanıza ve bellek ayırmayı izlemenize olanak tanır.
Unity bellek profili çıkarma araçları
Uygulamalarınızı oluşturmak için Unity Engine'i kullanıyorsanız Unity bellek profili oluşturma kılavuzunu inceleyebilirsiniz. Unity, Unity'deki uygulamanızda 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 paketi'dir. Paket, Unity Editor'a ek bir Memory Profiler penceresi ekler. Memory Profiler, uygulamanızdaki bellek kullanımını daha da ayrıntılı bir şekilde analiz etmenizi sağlar. Bellek sızıntılarını bulmak için anlık görüntüleri saklayıp karşılaştırabilir veya bellek parçalanması sorunlarını bulmak için bellek düzenini görebilirsiniz.
Unreal Memory Insights
Unreal Engine tarafından oluşturulan uygulamalar, bellek bloklarıyla ilişkili Düşük Seviyeli Bellek (LLM) etiketleri ve çağrı yığınları da dahil olmak üzere bellek ayırma ve serbest bırakma hakkında ayrıntılı bilgi görmek için Unreal Memory Insights'ı kullanabilir.
Bellek analizleri sorgu sistemi, herhangi bir zamanda canlı ayırma işlemlerini bulabilir, bellek kullanımındaki değişiklikleri belirleyebilir, bellek sızıntılarını tespit edebilir ve kısa vadeli ayırma işlemlerini uzun vadeli ayırma işlemlerinden ayırt edebilir.
UE 5.4'ten itibaren Memory Insights, Android projeleri için çağrı yığınlarıyla bellek izlemeyi destekler.
Yetersiz bellek analizleri
Android, oyununuzun bellek gereksinimlerini azaltmanıza ve önceki oyun çalıştırmalarının neden sonlandırıldığını belirlemenize olanak tanıyan geri çağırma işlevleri ve API'ler sağlar.
Geri çağırma işlevleri
Kullanımdan kaldırılan trim geri aramaları için kaydolmayın. Android'de, sistem bellek sınırlarına ulaştığında yerel bellek baskısı etkinliklerini algılamaya yönelik API'ler yoktur.
Geri çağırma işlemlerini kırpma, düşük bellek nedeniyle sonlandırmaları önlemede yardımcı olmadığından Android, TRIM_MEMORY_UI_HIDDEN ve TRIM_MEMORY_BACKGROUND dışındaki tümünü kullanımdan kaldırdı.
Oyunun sonlandırılması
Android, uygulamaları ve oyunları önbelleğe almak için mevcut tüm belleği kullanmaya çalışır. Böylece, uygulamalar ve oyunlar hızlı bir şekilde yüklenir (kullanıcı deneyimi iyileştirilir). Ancak bellek sınırlı hale geldiğinde sistem, normal cihaz çalışması için bellek açmak amacıyla en fazla bellek kullanan uygulamaları ve oyunları kapatır.
Daha iyi oyun belleği kullanımı elde etmenize yardımcı olacak bilgiler, analizler ve en iyi uygulamalar şunlardır:
ApplicationExitInfokullanın: Bu API, önceki oyun çalıştırmasının Android sistemi tarafından sonlandırılma nedenini döndürür. Önceki bir işlem çalıştırma ölümünün nedeni olarak düşük bellek olup olmadığını kontrol etmek içinApplicationExitInfokullanın. Oyunun düşük bellek nedeniyle kapatılıp kapatı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 planda çalışırken sonlandırılmasını önlemek ve cihazın özellikleriyle eşleşmesini sağlamak için oyunun bellek kullanımını buna göre ayarlamak üzere cihaz başına toplam fiziksel RAM'e bakın. Amacınız, uygulamaların arka plana geçtikten kısa süre sonra kapatılmasını önlemekse (oyuncunun çoklu görev yapmasına izin vermek için) oyununuzun bellek kullanımını azaltmak üzere trim geri çağırmalarını (özellikle
TRIM_MEMORY_UI_HIDDEN) kullanın.