Bellek, Android destekli cihazlarda kritik ve sınırlı bir kaynaktır. Android platformu geliştiricisi veya OEM olarak, Java çalışma zamanından Linux çekirdeğine kadar her düzeyde belleğin nasıl çalıştığını anlamak, yüksek performanslı ve kararlı bir sistem oluşturmak için çok önemlidir.
Bu kılavuzda Android bellek mimarisine, analiz için kullanılabilecek araçlara ve bellek ile ilgili sorunları belirleyip çözmenize yardımcı olacak uygulamalı alıştırmalara dair kapsamlı bir genel bakış sunulmaktadır.
Hedefler
Bu kılavuzu tamamladıktan sonra şunları yapabileceksiniz:
- Zygote işlem modeli ve belleğe eşlenmiş dosyalar da dahil olmak üzere Android belleğinin temel kavramlarını açıklayın.
- Resident Set Size (RSS), Proportional Set Size (PSS) ve Unique Set Size (USS) arasındaki farkı açıklayın.
- Bellek kullanımını hızlı bir şekilde değerlendirmek için
dumpsys meminfoveshowmapgibi standart komut satırı araçlarını kullanın. - Sızıntıları ve aşırı tahsisleri bulmak için AHAT'ı kullanarak Java yığın dökümlerini yakalayın ve analiz edin.
- Tüm sistemde hem Java hem de yerel belleği profillemek için Perfetto ve
heapprofdkullanın. - Pressure Stall Information (PSI) gibi sistem genelindeki bellek baskısı göstergelerini anlayın ve düşük bellek sonlandırıcı (LMK) etkinliğini izleyin.
- ZRAM takası ve sayfa önbelleği çıkarma dahil olmak üzere çekirdek düzeyinde geri kazanma etkinliğini gözlemleyin.
Rehber yapısı
Bu kılavuz, sırayla okunacak şekilde tasarlanmış aşağıdaki bölümlerden oluşur:
- Temel kavramlar: Android belleğinin temel teknik ilkeleri.
- Hızlı değerlendirme araçları: Hızlı triyaj için
meminfo,showmapveprocstats'ı kullanma. - Java belleğini analiz etme: AHAT ile Java yığınına ayrıntılı bakış.
- Bit eşlemler ve bellek: Görüntülerin RAM'i nasıl etkilediğini anlama ve bunları profillemek için araçları kullanma.
- Yerel belleği analiz etme: Perfetto ve
heapprofdile C/C++ belleğini profilleme. - WebView ve bellek: WebView'ların çok işlemli mimarisini ve bellekte kaplanan yerini anlama.
- Uygulama kodu bellektir: Sınıf yükleme ve dex şişmesinin RAM'i nasıl etkilediğini anlama.
- İş parçacıkları ve bellek: Yerel iş parçacığı yığınlarının maliyetini analiz etme.
- Bellek yerelliği ve performans: Veri erişim kalıplarının CPU performansını nasıl etkilediğini anlama.
- Hizmet bağlamaları ve süreç durumları: Süreçler arası bağımlılıkların OOM puanlarını nasıl etkilediğini anlama.
- Sistem genelinde sorun giderme: PSI, LMK, ZRAM takası ve sayfa önbelleği çıkarma işlemlerini izleme.
- Belleği geri kazanma: çıkarma ve takas:
memory.reclaimile memcg, charge ve proaktif geri kazanmayı anlama. - kswapd ve lmkd etkileşimi: kswapd ve lmkd'nin baskı altında birlikte nasıl çalıştığını anlama.
Ön koşullar ve ortam
Bu kılavuzda, Android bellek sorunlarının nasıl teşhis edileceğini ve çözüleceğini gösteren referans iş akışları, karşılaştırma verileri ve örnek olaylar sunulmaktadır.
- Analiz araçları: Bu kılavuzdaki tekniklerde öncelikle Perfetto,
dumpsys meminfo,showmapve AHAT gibi standart Android performans araçları kullanılır. - Kök ayrıcalıkları: Bazı sistem düzeyinde teşhis iş akışları (ör. çekirdek bellek basıncını veya donanım PMU sayaçlarını inceleme), kullanıcı hata ayıklama cihazında ya da emülatör derlemesinde yükseltilmiş kök ayrıcalıkları (
adb root) gerektirir.
Buradan başlayın: Temel kavramlar