Quando vengono raccolti gli oggetti raccolti in python? Quando viene rilasciata la memoria e la raccolta influisce sulle prestazioni? Si può disattivare o ottimizzare l'algoritmo gc e, in caso affermativo, come?Quando vengono raccolti gli oggetti raccolti in python?
risposta
Ecco un estratto da non vengono mai esplicitamente distrutti i language reference
oggetti; tuttavia, quando diventano irraggiungibili, possono essere raccolti dalla spazzatura. Un'implementazione può posticipare la garbage collection o ometterla del tutto - è una questione di qualità dell'implementazione come viene implementata la garbage collection, purché non siano raccolti oggetti che sono ancora raggiungibili.
CPython dettaglio implementativo: CPython attualmente utilizza uno schema di riferimento conteggio con (opzionale) ritardato rilevamento di immondizia ciclicamente collegata, che raccoglie maggior parte degli oggetti non appena diventano irraggiungibili, ma non è garantito per raccogliere i rifiuti contenenti riferimenti circolari . Consultare la documentazione del modulo gc per informazioni sul controllo della raccolta di rifiuti ciclici. Altre implementazioni agiscono in modo diverso e CPython potrebbe cambiare. Non dipendere dalla finalizzazione immediata degli oggetti quando diventano irraggiungibili (es: file sempre chiusi).
EDIT: A proposito di rimandare la raccolta dei rifiuti .... il modulo gc
permette di interagire con il garbage collector, e disattivarla se si desidera e cambiare la frequenza di raccolta ecc, ma non l'ho usato io. Inoltre, cicli che contengono oggetti con i metodi __del__
are not collected.
Quando gli oggetti vengono raccolti in Python?
C'è molto dettaglio nel codice sorgente per CPython: http://svn.python.org/view/python/trunk/Modules/gcmodule.c?revision=81029&view=markup
Ogni volta che un conteggio di riferimento scende a zero, l'oggetto viene immediatamente rimosso.
293/* gc ciclico di Python non dovrebbe mai vedere una refcount in entrata
294 * di 0: se qualcosa decref'ed a 0, che avrebbe dovuto essere
295 * deallocata subito in quel momento .
Una raccolta completa viene attivata quando il numero di nuovi oggetti è maggiore del 25% del numero di oggetti esistenti.
87 In aggiunta alle varie soglie configurabili, abbiamo solo innescare una
88 completa raccolta se il rapporto
89 long_lived_pending/long_lived_total
90 è superiore ad un dato valore (cablato a 25%).
Quando viene rilasciata la memoria?
sono riuscito a ripescare queste informazioni solo.
781/* cancellare tutti gli elenchi liberi
782 * Tutte le liste libero sono cancellate durante la raccolta della più alta generazione.
783 * Gli articoli allocati nell'elenco libero possono mantenere occupato un arena pymalloc .
784 * Azzeramento delle liste libere possono restituire la memoria al sistema operativo precedente.
785 */
In base a questo, Python potrebbe essere mantenere il vostro oggetto in una lista libera per il riciclaggio, anche se si lascia cadere la sua refcount a zero. Non riesco a trovare esplicitamente quando viene effettuata la chiamata gratuita per restituire memoria al sistema operativo, ma immagino che ciò avvenga quando viene creata una raccolta e l'oggetto non viene tenuto in una lista libera.
fa la prestazione impatto collezione?
Qualunque non banale garbage collector Ho sentito richiede sia CPU e la memoria per funzionare. Pertanto, sì, c'è sempre un impatto sulle prestazioni. Dovrai sperimentare e conoscere il tuo garbage collector.
I programmi che richiedono vera reattività volta che hanno incontrato problemi con, in quanto netturbini non mi concedono il controllo su quando corrono o per quanto tempo lo fanno. Alcuni casi particolari possono causare anche un uso eccessivo della memoria, un esempio è l'abilità di Python per mantenere le liste libere.
- 1. Come vengono raccolti gli oggetti anonimi raccolti in Javascript?
- 2. Registrazione quando gli oggetti sono dati inutili raccolti
- 3. I tipi di dati MakeGenericType/generici vengono raccolti?
- 4. I rifiuti goroutini vengono raccolti insieme ai loro canali?
- 5. Quali dati vengono raccolti da Google Analytics (per impostazione predefinita)
- 6. Come posso fermare un agente specifico in Clojure? Quando vengono raccolti i loro stati?
- 7. Come gli atomi di Erlang possono essere raccolti dalla spazzatura
- 8. Thread Java Rifiuti raccolti o meno
- 9. I rifiuti vanno raccolti parti di fette?
- 10. campi disabili non raccolti da serializeArray
- 11. Perché i rifiuti di Android vengono raccolti così tante volte con ObjectMapper di Jacksons?
- 12. Come vedere quali oggetti sono stati raccolti in garbage collection in Java?
- 13. Creare script INSERT SQL con i valori raccolti dalla tabella
- 14. I rifiuti raccolti sono più veloci del C++?
- 15. Linked ViewI fagioli raccolti portano a perdite di memoria
- 16. Quando vengono creati oggetti attributo?
- 17. Come vengono memorizzati gli oggetti in JavaScript?
- 18. Python Set Intersection - Quali oggetti vengono restituiti
- 19. Capire gli oggetti in Python
- 20. python - Quando vengono eliminati WebSocketHandler e TornadoWebSocketClient?
- 21. Gli oggetti ActionBarSherlock non vengono visualizzati in overflow
- 22. Quando vengono create/distrutte stringhe costanti?
- 23. JPA - Quando utilizzare getTransaction() quando gli oggetti persistono
- 24. Come vengono gestiti gli array di oggetti Java?
- 25. Come vengono salvati e caricati gli oggetti valore?
- 26. Perché gli oggetti immutabili sono amati dal GC di JVM?
- 27. Come vengono memorizzati gli oggetti valore nel database?
- 28. Gli oggetti IOS Core Animation non vengono rilasciati
- 29. Perché gli oggetti Argomenti JavaScript vengono modificati dall'assegnazione al parametro?
- 30. C# - Gli oggetti vengono immediatamente distrutti quando si esce dal campo di applicazione?
Nizza, anche se piuttosto fauge. Hai idea di come emetti o rimandi gc? –
Questa è una domanda diversa, Matt Alcock e la risposta è disponibile. – erisco
@MattAlcock: emettere o posticipare gc? (1) Questa è una domanda a parte. E. (2) Perché vorresti? Se non si desidera che una raccolta dati venga raccolta, assegnarla a una variabile. –