E 'molto difficile, in generale, per un processo di "dare memoria indietro al sistema operativo" (fino a quando il processo termina e il sistema operativo torna tutto la memoria, ovviamente), perché (nella maggior parte implementazione) cosa malloc
i ritorni sono ricavati da grandi blocchi per l'efficienza, ma l'intero blocco non può essere restituito se una parte di esso è ancora in uso - quindi, la maggior parte delle librerie standard C non ci provano nemmeno.
Per una discussione decente in un contesto Python, vedere ad es. here. Evan Jones ha risolto alcuni problemi specifici di Python come descritto in here e here, ma la sua patch è nel trunk da Python 2.5, quindi i problemi che stai osservando sono sicuramente con il pacchetto malloc di sistema, non con Python di per sé. Una spiegazione specifica per il 2.6 è here e here.
thread A SO è here, dove Hugh Allen nella sua risposta cita i programmatori di Firefox al estendere che Mac OS X è un sistema in cui è praticamente impossibile per un processo di dare memoria indietro al sistema operativo.
Quindi, solo terminando un processo puoi essere sicuro di rilasciare la sua memoria. Ad esempio, un server di lunga durata, una volta ogni tanto, può eseguire lo snapshot del suo stato su disco e spegnerlo (con un processo minuscolo di watchdog, sistema o personalizzato, controllarlo e riavviarlo). Se sai che la prossima operazione richiederà molta memoria per un breve periodo di tempo, spesso puoi fare lo os.fork
, fare il lavoro affamato di memoria nel processo figlio e avere i risultati (se ce ne sono) restituiti al processo genitore tramite una pipe come il processo figlio termina. E così via e così via.
fonte
2010-06-23 00:29:53
Perché ti aspetti che scenda? Quale sistema operativo stai usando? In molti sistemi operativi, una volta che un processo ha acquisito memoria, il processo rimane così grande. –
Sto usando mac osx 10.5, credo che più avanti mangerebbe più spazio. al momento era cresciuto di circa 15 MB in più da 24 MB nella fase iniziale. Credo che la memoria del processo dovrebbe aumentare in termini di MB, il che potrebbe influire sulla dimensione della memoria disponibile. – herby