I sistemi operativi implementano tecniche per chiedere ai programmi di abbandonare la memoria non vitale in tempi di carenza?

4

Quando un sistema sta esaurendo la memoria disponibile, può chiedere ai programmi in generale di abbandonare qualsiasi memoria non vitale senza spegnersi. Come un segnale di processo che fa sì che i processi producano qualsiasi memoria che possono non renderli inutilizzabili.

Pensa a uno stage prima di metterli in cache su disco o terminarli del tutto.

Qualsiasi sistema operativo che esegue questo?

    
posta Allahjane 18.09.2018 - 21:14
fonte

2 risposte

2

iOS sì. In primo luogo, chiederà alle app di rinunciare alla memoria quando diventa stretta (e le app che abbandonano la memoria quando necessario tendono a vivere più a lungo), e c'è una classe (credo) NSCache che contiene oggetti memorizzati nella cache che possono scomparire in qualsiasi momento. MacOS 9 ha fatto cose simili. Su MacOS X l'ipotesi è che la memoria sia illimitata.

    
risposta data 18.09.2018 - 21:59
fonte
0

Oltre alla risposta di gnasher729 , anche iOS ha un metodo delegato su UIViewController chiamato didReceiveMemoryWarning() .

Discussion

Your app never calls this method directly. Instead, this method is called when the system determines that the amount of available memory is low.

You can override this method to release any additional memory used by your view controller. If you do, your implementation of this method must call the super implementation at some point.

Sfortunatamente, il 99% delle implementazioni che ho visto sono questo stub predefinito:

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

È un po 'uno tragedia dello scenario comune . Ogni app trarrebbe vantaggio dall'implementazione corretta di questo comportamento (a causa di una minore possibilità di arresto forzato o di impaginazione), ma ciascuna app beneficia individualmente non implementandola (tempo di risposta più veloce, poiché non è necessario ricalcolare / ricaricare le risorse eliminate ).

    
risposta data 19.09.2018 - 01:34
fonte

Leggi altre domande sui tag