5

Sto utilizzando GCD per ottenere notifiche sulla pressione della memoria.Come rispondere alle notifiche di pressione della memoria da GCD?

GCD documentation descrive alcune costanti in questo modo:

DISPATCH_MEMORYPRESSURE_WARN

La condizione di pressione memoria di sistema è in fase di avviso. Le app dovrebbero rilasciare memoria di cui non hanno bisogno in questo momento.

DISPATCH_MEMORYPRESSURE_CRITICAL

La memoria di sistema condizione di pressione è in fase critica. Le app dovrebbero rilasciare più memoria possibile.

Sembra logico che io debba liberare memoria inutilizzata. Tuttavia, in altri luoghi (man pages e source code) Trovo questa nota relativo a questi costanti:

pressione della memoria elevata è una condizione a livello di sistema che le applicazioni registrati per questa fonte dovrebbero reagire a cambiando il loro futuro memoria usare il comportamento, ad es riducendo le dimensioni della cache delle operazioni appena avviate fino a quando la pressione della memoria ritorna normale.

Tuttavia, le applicazioni dovrebbero NON attraversare e scartare cache esistenti per operazioni passate quando la pressione della memoria tem sistema sistema entra uno stato elevato, in quanto è probabile che innescare operazioni di VM che sarà ulteriormente ulteriormente ther aggravare la pressione della memoria di sistema.

Questo mi confonde. Quindi dovrei liberare memoria, o dovrei semplicemente smettere di allocare nuova memoria?

risposta

0

MacOS dispone di un sistema di memoria virtuale (VM) che utilizza un archivio di supporto: il file system. Il file system viene utilizzato per contenere la memoria che non è attualmente in uso. Quando il sistema sta esaurendo la memoria reale (RAM), le cose in memoria che non vengono utilizzate attivamente possono essere scritte su disco e caricate di nuovo nella RAM in un secondo momento.

iOS ha un sistema di memoria virtuale ma non un backing store. Quando la memoria si esaurisce, il sistema chiede alle app di ridurre il footprint di memoria. Se questo non libera abbastanza memoria il sistema inizierà ad uccidere le app.

Le indicazioni fornite dalle intestazioni libdispatch si riferiscono al sistema di memoria virtuale MacOS, non a iOS.

Su iOS un'applicazione voglia scarti oggetti e ridurre le dimensioni della cache quando si gestisce un avviso di memoria. Prestare particolare attenzione agli oggetti che utilizzano memoria sporca (non eliminabile). Questa è la memoria che il sistema non può riutilizzare automaticamente da solo - deve essere prima scartato dall'applicazione. In una tipica applicazione iOS, le immagini (immagini) utilizzano la memoria più sporca.