Android platformu, boş belleğin boşa bellek olduğu prensibiyle çalışır. Her zaman mevcut belleğin tamamını kullanmaya çalışır. Örneğin, sistem kapatıldıktan sonra uygulamaları bellekte tutar. Böylece kullanıcılar bu uygulamalara hızlıca geri dönebilir. Bu nedenle, Android cihazlar genellikle çok az boş bellekle çalışır. Bellek yönetimi, belleği önemli sistem işlemleri ve birçok kullanıcı uygulaması arasında doğru şekilde paylaştırmak için hayati önem taşır.
Bu sayfada Android'in, sistem ve kullanıcı uygulamaları için belleği nasıl ayırdığıyla ilgili temel bilgiler verilmektedir. Ayrıca, işletim sisteminin düşük bellek durumlarına nasıl tepki verdiğini de açıklar.
Bellek türleri
Android cihazlar üç farklı bellek türü içerir: RAM, zRAM ve depolama. Hem CPU hem GPU'nun aynı RAM'e eriştiğini unutmayın.
Şekil 1. Bellek türleri: RAM, zRAM ve depolama
RAM en hızlı bellek türüdür, ancak genellikle sınırlı bir boyuta sahiptir. İleri teknoloji cihazlar genellikle en fazla RAM'e sahiptir.
zRAM, değişim alanı için kullanılan bir RAM bölümüdür. zRAM'ye yerleştirildiğinde her şey sıkıştırılır, ardından zRAM'den kopyalandığında sıkıştırılır. Sayfalar zRAM'a taşındıkça veya zRAM'dan çıkarıldıkça RAM'in boyutu artar veya küçülür. Cihaz üreticileri maksimum boyutu ayarlayabilir.
Depolama; tüm uygulamalar, kitaplıklar ve platform için dosya sistemi ve dahil edilen nesne kodu gibi kalıcı verilerin tamamını içerir. Storage, diğer iki bellek türüne göre çok daha fazla kapasiteye sahiptir. Sık sık yazma işlemi bu belleğin aşınmasına ve depolama ortamının ömrünü kısaltabileceğinden, Android'de diğer Linux uygulamalarında olduğu gibi depolama alanı değişim alanı için kullanılmaz.
Anı sayfaları
RAM sayfalara bölünür. Genellikle her sayfa 4 KB bellek içerir.
Sayfalar ücretsiz veya kullanılmış olarak kabul edilir. Ücretsiz sayfalar kullanılmayan RAM'dir. Kullanılan sayfalar, sistemin aktif olarak kullandığı RAM'dir ve aşağıdaki kategorilerde gruplandırılır:
- Önbelleğe alındı: Depolama alanındaki bir dosya tarafından yedeklenen bellek (ör. kod veya bellekle eşlenmiş dosyalar). İki tür önbelleğe alınmış bellek vardır:
- Gizli: Bir sürece aittir ve paylaşılmaz
- Temiz: Depolama alanındaki bir dosyanın değiştirilmemiş kopyası, boş belleği artırmak için
kswapd
tarafından silinebilir - Kirli: Depolama alanındaki dosyanın değiştirilmiş kopyası; boş bellek miktarını artırmak için
kswapd
ile zRAM'e taşınabilir veya sıkıştırılabilir
- Temiz: Depolama alanındaki bir dosyanın değiştirilmemiş kopyası, boş belleği artırmak için
- Shared: Birden çok işlem tarafından kullanılır
- Temizle: Depolama alanındaki dosyanın değiştirilmemiş kopyası, boş belleği artırmak için
kswapd
tarafından silinebilir - Kirli: Depolama alanındaki dosyanın değiştirilmiş kopyası; yapılan değişikliklerin, boş belleği
kswapd
artırmak için depolama alanındaki dosyaya geri yazılmasına veyamsync()
ya damunmap()
kullanılarak açıkçamsync()
kullanılmasına olanak tanır.
- Temizle: Depolama alanındaki dosyanın değiştirilmemiş kopyası, boş belleği artırmak için
- Gizli: Bir sürece aittir ve paylaşılmaz
- Anonim: Depolama alanındaki bir dosya tarafından desteklenmeyen bellek (ör.
mmap()
tarafındanMAP_ANONYMOUS
işareti ayarlanmış olarak ayrılmış)- Kirli: Boş belleği artırmak için zRAM gücünde
kswapd
oranında taşınabilir/sıkıştırılabilir
- Kirli: Boş belleği artırmak için zRAM gücünde
Sistem RAM'i etkin bir şekilde yönettiğinden, boş sayfaların ve kullanılan sayfaların oranları zamanla değişir. Bu bölümde açıklanan kavramlar, düşük bellek durumlarını yönetmenin anahtarıdır. Bu belgenin bir sonraki bölümünde bunlar daha ayrıntılı olarak açıklanmaktadır.
Düşük bellek yönetimi
Android'in düşük bellek durumlarıyla başa çıkmak için iki temel mekanizması vardır: çekirdek değiştirme arka plan programı ve düşük bellekli katlayıcı.
çekirdek değişimi arka plan programı
Çekirdek değişimi arka plan programı (kswapd
) Linux çekirdeğinin bir parçasıdır ve kullanılan belleği boş belleğe dönüştürür. Cihazdaki boş bellek azaldığında arka plan programı etkin hale gelir. Linux çekirdeği, düşük ve yüksek boş bellek eşiklerini korur.
Boş bellek düşük eşiğin altına düştüğünde kswapd
, belleği geri kazanmaya başlar. Boş bellek yüksek eşiğe ulaştığında kswapd
, belleği geri kazanmayı durdurur.
kswapd
, depolama alanı tarafından desteklendiği ve değiştirilmediği için temiz sayfaları silerek bu sayfaları geri alabilir. Bir işlem, silinmiş temiz bir sayfayla ilgili işlem yapmaya çalışırsa sistem sayfayı depolama alanından RAM'e kopyalar. Bu işlem talep sayfalama olarak bilinir.
2. Şekil. Temiz sayfa, depolama alanı tarafından destekleniyor, silindi
kswapd
, önbelleğe alınan gizli gizli sayfaları ve anonim kirli sayfaları, sıkıştırıldıkları zRAM'ye taşıyabilir. Bu işlem RAM'de (boş sayfalar) kullanılabilir bellekte yer açar. Bir işlem zRAM'de kirli bir sayfaya dokunmaya çalışırsa sayfa sıkıştırılmaz ve tekrar RAM'e taşınır. Sıkıştırılmış bir sayfayla ilişkilendirilen işlem sonlandırılırsa sayfa zRAM'den silinir.
Boş bellek miktarı belirli bir eşiğin altına düşerse sistem işlemleri sonlandırmaya başlar.
3. Şekil. Kirli sayfa zRAM'e taşındı ve sıkıştırıldı
Hafıza kaybı
Çoğu zaman kswapd
sistem için yeterli bellekte yer açamamaktadır. Bu durumda sistem, bir uygulamaya belleğin azaldığını ve ayırmalarını azaltması gerektiğini bildirmek için onTrimMemory()
aracını kullanır. Bu yeterli olmazsa çekirdek, bellekte yer açmak için işlemleri sonlandırmaya başlar. Bunun için düşük bellek katlayıcı (LMK) kullanılır.
LMK, hangi işlemin sonlandırılacağına karar vermek için çalışan süreçlere öncelik vermek amacıyla oom_adj_score
adlı "bellek yok" puanını kullanır. Yüksek puana sahip işlemler önce sonlandırılır. Önce arka plan uygulamaları, sistem süreçleri de en son
sonlandırılır. Aşağıdaki tabloda, LMK puanlama kategorileri yüksekten düşüğe doğru listelenmiştir. En yüksek puana sahip kategorideki öğeler birinci satırda ilk önce sonlandırılır:
4. Şekil. En yüksek puanlar en üstte, en düşük puanlar ise altta olmak üzere Android süreçlerinin
Bunlar, yukarıdaki tabloda bulunan çeşitli kategorilerin açıklamalarıdır:
Arka plan uygulamaları: Daha önce çalıştırılmış ve şu anda etkin olmayan uygulamalar. LMK, önce en yüksek
oom_adj_score
olandan başlayarak arka plan uygulamalarını sonlandırır.Önceki uygulama: En son kullanılan arka plan uygulaması. Önceki uygulama, arka plandaki uygulamalardan birine göre daha yüksek önceliğe (daha düşük puan) sahiptir. Çünkü kullanıcının bu uygulamaya geçiş yapma olasılığı daha yüksektir.
Home uygulaması: Bu, başlatıcı uygulamasıdır. Bunu kapatmak, duvar kağıdının kaybolmasına neden olur.
Hizmetler: Hizmetler uygulamalar tarafından başlatılır ve buluta senkronizasyon veya yükleme içerebilir.
Algılanabilir uygulamalar: Küçük bir kullanıcı arayüzü görüntüleyen arama işlemi çalıştırmak veya müzik dinlemek gibi, kullanıcı tarafından algılanabilecek şekilde ön planda olmayan uygulamalar.
Ön plan uygulaması: O anda kullanılan uygulama. Ön plandaki uygulamayı kapatmak, kullanıcıya cihazda bir şeylerin yolunda gitmediğini gösterebilecek bir uygulama kilitlenmesi gibi görünür.
Kalıcı (hizmetler): Bunlar telefon ve kablosuz gibi cihaz için temel hizmetlerdir.
Sistem: Sistem işlemleri. Bu işlemler sonlandırıldığında, telefon yeniden başlatılmış gibi görünebilir.
Yerel: Sistem tarafından kullanılan çok alt düzey işlemler (örneğin,
kswapd
).
Cihaz üreticileri LMK'nin davranışını değiştirebilir.
Bellek ayak izini hesaplama
Çekirdek, sistemdeki tüm bellek sayfalarını izler.
5.Şekil Farklı işlemler tarafından kullanılan sayfalar
Sistem, bir uygulamanın ne kadar bellek kullandığını belirlerken paylaşılan sayfaları dikkate almalıdır. Aynı hizmete veya kitaplığa erişen uygulamalar, bellek sayfalarını paylaşır. Örneğin, Google Play Hizmetleri ve bir oyun uygulaması bir konum hizmetini paylaşıyor olabilir. Bu durum, her bir uygulamaya kıyasla genel olarak hizmete ne kadar belleğin ait olduğunun belirlenmesini zorlaştırır.
6.Şekil İki uygulama tarafından paylaşılan sayfalar (ortada)
Bir uygulamanın bellek ayak izini belirlemek için aşağıdaki metriklerden herhangi biri kullanılabilir:
- Kalıcı Küme Boyutu (RSS): Uygulama tarafından kullanılan paylaşılan ve paylaşılmayan sayfaların sayısı
- Orantılı Küme Boyutu (PSS): Uygulama tarafından kullanılan paylaşılmayan sayfa sayısı ve paylaşılan sayfaların eşit dağılımı (örneğin, üç işlem 3 MB paylaşıyorsa her işlem PSS cinsinden 1 MB alır)
- Benzersiz Grup Boyutu (USS): Uygulama tarafından kullanılan paylaşılmayan sayfa sayısı (paylaşılan sayfalar dahil değildir)
PSS, sayfalar birden çok kez sayılmadığı için tüm işlemlerin ne kadar bellek kullandığını bilmek isteyen işletim sistemi için yararlıdır. Sistemin hangi sayfaların ve kaç işlemle paylaşıldığını belirlemesi gerektiğinden PSS'nin hesaplanması uzun sürer. RSS, paylaşılan ve paylaşılmayan sayfaları birbirinden ayırt etmez (hesaplamayı daha hızlı hale getirir) ve bellek ayırmadaki değişiklikleri izlemek için daha iyidir.
Ek kaynaklar
- Bellek yönetimine genel bakış
- Süreçler ve Uygulama Yaşam Döngüsü
- Android bellek kullanımını anlama - Google I/O sunumu
- Android Bellek ve Oyunlar - Google I/O sunumu
- Android Düşük Bellekli Katil Arka Plan Programı
Sizin için önerilenler
- Not: Bağlantı metni JavaScript kapalıyken gösterilir
- Uygulama başlatma süresi