Ho una teoria che il meccanismo di garbage collection CLR significa che posso ottenere via riferimenti circolari nella mia gerarchia di oggetti senza creare deadlock per la rimozione e la garbage collection. È un presupposto sicuro da fare? (Lingua di destinazione VB.NET)La metodologia di raccolta dei dati inutili CLR indica che è sicuro lanciare riferimenti di oggetti circolari?
risposta
Il garbage collector .NET è un contrassegno generazionale e un programma di raccolta. Non usa il conteggio dei riferimenti. Quindi sì, è sicuro avere riferimenti circolari. lingua è irrilevante
Basta fare molta attenzione per evitare di passare un riferimento a una statica e anche ricordare che i delegati conteranno come riferimento all'oggetto su cui sono implementati. molto facile mantenere le cose in vita con cose come un elenco di gestori di eventi statici. – morechilli
Secondo questo articolo: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5109829.html
circolare riferimento è un problema che si verifica quando ci sono due oggetti che si riferiscono a ogni altro. Diciamo che hai Classe A che fa riferimento alla Classe B. Se anche la Classe B fa riferimento alla Classe A, allora abbiamo un riferimento circolare . Questo succede in molte situazioni. Un tipico esempio di è una relazione genitore-figlio tra oggetti, dove il bambino interagisce con l'oggetto genitore e contiene anche un riferimento all'oggetto genitore . Ciò potrebbe portare agli oggetti che non sarebbero stati rimossi fino all' l'applicazione è stata chiusa. Il metodo di raccolta dei rifiuti .NET risolve il problema del riferimento circolare perché il Garbage Collector è in grado di correggere per pulire qualsiasi oggetto che sia raggiungibile dalla radice.
EDIT:
A giudicare da questo post: http://blogs.msdn.com/abhinaba/archive/2009/01/27/back-to-basics-reference-counting-garbage-collection.aspx sembra che la raccolta dei rifiuti di Net non si basa sul conteggio di riferimento per la raccolta dei rifiuti.
Un altro articolo la pena di leggere (spiega garbage collection in dettaglio) è questa: http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/
"che NON è raggiungibile dalla radice" –
- 1. C# Raccolta di dati inutili Root attivi
- 2. La raccolta dei dati inutili è automatica in C++ standard?
- 3. Tempo di raccolta dati inutili Java?
- 4. È possibile ottenere OutOfMemoryError perché la raccolta dei dati inutili è troppo lenta?
- 5. Dovrei preoccuparmi dei riferimenti circolari in Python?
- 6. Quando l'oggetto è idoneo per la raccolta dati inutili?
- 7. node.js v8 la raccolta di dati inutili non sembra attivare
- 8. Infissi di dottrina - riferimenti circolari
- 9. Ogni classe definita dall'utente deve implementare l'interfaccia IDisposable per ottenere la raccolta dei dati inutili
- 10. Comportamento della raccolta di dati inutili per String.intern()
- 11. Riferimenti circolari che impediscono la serializzazione del grafico dell'oggetto
- 12. Oggetto non raccolta dati inutili, ma senza gcroots
- 13. La raccolta dei dati inutili si verifica immediatamente dopo la chiamata a Hashmap.remove()?
- 14. riferimenti circolari in RavenDB
- 15. Collezione Garbarge in Ruby con riferimenti a oggetti circolari
- 16. Xamarin garbage collector e circolari riferimenti
- 17. Come viene eseguita la raccolta dei dati inutili in Java e come si confronta con .net?
- 18. Utilizzo di Parcelable con riferimenti circolari
- 19. javascript, riferimenti circolari e perdite di memoria
- 20. Riferimenti file circolari non consentiti
- 21. Come salvare un oggetto con riferimenti circolari?
- 22. Trovare variabili 'Lost' (riferimenti circolari)
- 23. Errori durante l'importazione di riferimenti circolari
- 24. Come gestire l'oggetto di classe con riferimenti circolari?
- 25. riferimenti circolari tra le funzioni javascript
- 26. Riferimenti circolari in Javascript/Garbage collector
- 27. Come gestire i riferimenti circolari?
- 28. Che cosa significa "GC--" in un log di raccolta dati inutili java?
- 29. risolvere i riferimenti circolari da oggetto JSON
- 30. È possibile ottenere il conteggio dei riferimenti agli oggetti?
Vedi qui per una domanda simile con una buona risposta accettata http://stackoverflow.com/questions/400706/circular-references -cause-memory-leak –
@David: AZ ha detto che non usa il conteggio dei riferimenti. –
@Johannes: era un errore di battitura nel mio commento, intendevo la domanda (non la risposta) la domanda iniziale era se l'uso del conteggio dei riferimenti in CLR rendesse i cicli non sicuri. La domanda (non la risposta di AZ) era sbagliata su come il CLR esegue GC. –