5

Bellek basınç bildirimleri almak için GCD kullanıyorum.GCD'den bellek basıncı bildirimlerine nasıl yanıt verilir?

GCD documentation çok gibi bazı sabitleri:

DISPATCH_MEMORYPRESSURE_WARN

sistem belleği basınç durum, kontrol aşamasındadır. Apps , şu anda ihtiyaç duymadıkları belleği serbest bırakmalıdır.

DISPATCH_MEMORYPRESSURE_CRITICAL

sistem belleği basınç durumu kritik bir aşamadadır. Apps , olabildiğince fazla bellek yayınlamalıdır.

Kullanılmayan belleği boşaltmam mantıklı görünüyor. Ancak, diğer yerlerde (man pages ve source code) Ben bu sabitleri ile ilgili şu notu bulmak içinde:

Artmış bellek baskısı bu kaynak için kayıtlı uygulamalar gelecekteki hafızayı değiştirerek tepki gereken bir sistem genelinde bir durumdur davranış kullanın, örneğin Bellek basıncı normale dönene kadar yeni başlatılan işlemlerinin önbellek boyutlarını azaltarak.

Ancak, uygulamalar çapraz ve bu ayrıca başka Ther sistem belleği basıncını ağırlaştırmak edeceğini VM operasyonlarını tetikleme olasılığı olduğu gibi sistem sistem tem bellek baskısı, yükseltilmiş bir devlet girdiğinde geçmiş işlemleri için mevcut Önbellekler atmak DEĞİL gerekir.

Bu beni şaşırtıyor. Hafızayı boşaltmalı mıyım yoksa yeni hafıza tahsis etmeli miyim?

cevap

0

MacOS, bir yedekleme deposunu kullanan bir sanal bellek (VM) sistemine sahiptir: dosya sistemi. Dosya sistemi şu anda kullanılmayan belleği tutmak için kullanılır. Sistem gerçek bellekte (RAM) düşük olduğunda, aktif olarak kullanılmayan bellekteki dosyalar diske yazılabilir ve daha sonra RAM'e geri yüklenebilir.

iOS bir sanal bellek sistemine sahiptir, ancak bir yedekleme deposu yoktur. Bellek azaldığında, sistem uygulamalar için bellek ayak izini azaltmasını ister. Eğer bu yeterli hafızayı boşaltmazsa, sistem uygulamaları öldürmeye başlayacaktır.

Libdispatch başlıklarından alıntı yaptığınız yönlendirme, iOS değil MacOS sanal bellek sistemine başvurmaktır. iOS'da

bir uygulama gerektiği atma bir bellek uyarı işlerken ve önbellek boyutunu azaltmak nesneleri. Kirli (temizlenemeyen) bellek kullanan nesnelere özellikle dikkat edilmelidir. Bu, sistemin otomatik olarak yeniden kullanamadığı bellektir - önce uygulama tarafından atılmalıdır. Tipik bir iOS uygulamasında resimler (resimler) en kirli belleği kullanır.