Se ho capito bene, in .NET l'implementazione predefinita di Object.GetHashCode()
restituisce un valore basato sull'indirizzo di memoria di un oggetto (almeno per i tipi di riferimento). Tuttavia, il garbage collector è libero di spostare gli oggetti in memoria. Presumibilmente il codice hash non cambia solo perché il GC sposta un oggetto, quindi c'è una gestione speciale per questa interazione, o le mie supposizioni sono errate?Come funziona Object.GetHashCode quando il GC sposta un oggetto?
22
A
risposta
21
Non restituisce un valore in base all'indirizzo. Restituisce un valore basato sul blocco di sincronizzazione per l'oggetto.
Il blocco di sincronizzazione è assegnata la prima volta object.GetHashCode
viene chiamato (quando non override) o c'è contesa sul blocco per l'oggetto. (Può essere assegnato se si chiama Wait/Pulse/PulseAll anche, non ho guardato.)
Il blocco di sincronizzazione è indipendente dalla posizione dei dati principali dell'oggetto in memoria. Fondamentalmente (a quanto ho capito) c'è una grande tabella per i blocchi di sincronizzazione, che viene mantenuta efficiente in qualche modo, in parte a causa non di tutti gli oggetti che ne richiedono uno (solo quelli in cui è richiesto il codice hash del sistema o blocco).
Problemi correlati
- 1. Attuazione della Object.GetHashCode()
- 2. Come devo implementare Object.GetHashCode() per l'uguaglianza complessa?
- 3. come faccio a cancellare/gc un oggetto in Actionscript 3?
- 4. Come funziona un oggetto classmethod?
- 5. Come funziona Boehm GC per il programma C?
- 6. Sposta un oggetto su un tracciato curva di Bézier
- 7. non cambia oggetto di riferimento dopo GC
- 8. QGraphicsItem sposta oggetto solo attraverso l'asse X
- 9. Come funziona after_save lavoro durante il salvataggio di un oggetto
- 10. GC non raccoglie quando WeakReference fa riferimento a un delegato?
- 11. funziona la raccolta dei rifiuti con il compilatore Go (gc)?
- 12. Come funziona il costruttore durante l'inizializzazione di un oggetto?
- 13. Come funziona il codice sorgente Python "free_list = (PyIntObject *) Py_TYPE (v);" sposta il puntatore free_list sull'oggetto successivo?
- 14. Come funziona ToList() su un oggetto IEnumerable?
- 15. In che modo il runtime .NET sposta la memoria?
- 16. Il GC .NET funzionerà con un oggetto abbandonato che esegue un metodo in modo asincrono?
- 17. Sposta il costruttore sull'oggetto derivato
- 18. Javascript forza raccolta GC?/Oggetto a forza libera?
- 19. Android GC - LogCat mostrando sempre l'attività GC
- 20. Thread come root GC
- 21. Come funziona il meccanismo Garbage Collection?
- 22. Ricaricare un oggetto non funziona in rspec
- 23. Debug di errore fatale di Python: oggetto GC già monitorato
- 24. Come posso testare l'unità GC?
- 25. Come si sposta un collegamento simbolico relativo?
- 26. Python Threading.Timer oggetto non funziona quando viene compilato a .exe
- 27. Html.ActionLink() non funziona per il passaggio di un oggetto C#
- 28. Problemi con il GC quando si usa un WeakValueDictionary per le cache
- 29. Toolbar si sposta fuori dallo schermo quando si utilizza adjustpan
- 30. Cocos2d sposta l'animazione su un percorso