Wenn ich richtig verstehe, gibt in .NET die Standardimplementierung von Object.GetHashCode()
einen Wert basierend auf der Speicheradresse eines Objekts zurück (zumindest für Referenztypen). Der Garbage Collector kann jedoch Objekte im Speicher frei verschieben. Vermutlich ändert sich der Hash-Code nicht, nur weil der GC ein Objekt bewegt, gibt es also eine spezielle Handhabung für diese Interaktion, oder sind meine Annahmen falsch?Wie funktioniert Object.GetHashCode, wenn der GC ein Objekt verschiebt?
Antwort
Es wird kein Wert basierend auf der Adresse zurückgegeben. Es gibt einen Wert zurück, der auf dem Synchronisierungsblock für das Objekt basiert.
Der Sync-Block wird beim ersten Aufruf von object.GetHashCode
zugewiesen (wenn nicht überschrieben) oder gibt es Streit auf die Sperre für das Objekt. (Es kann zugewiesen werden, wenn Sie Wait/Pulse/PulseAll auch aufrufen, habe ich nicht gesucht.)
Der Sync-Block ist unabhängig von der Position der Hauptdaten des Objekts im Speicher. Grundsätzlich gibt es (wie ich es verstehe) eine große Tabelle für Sync-Blöcke - die auf gewisse Weise effizient gehalten wird, teilweise aufgrund der Tatsache, dass nicht jedes Objekt eines benötigt (nur solche, bei denen der System-Hashcode erforderlich ist oder Sperren).
- 1. GC Verhalten, wenn ein Objekt
- 2. Wie verschiebt man ein Objekt in Three.js?
- 3. Anzahl der GC-Bereinigungen für ein Objekt zählen
- 4. Wie lösche ich/gc ein Objekt in Actionscript 3?
- 5. Objekt auf GC-Zerstörungsversuch halten
- 6. Wie funktioniert GC mit IEnumerator und Ertrag?
- 7. ändert Objekt Referenz nach GC
- 8. Wie funktioniert ein Classmethod-Objekt?
- 9. Animiertes Objekt, wenn der Mauszeiger nicht funktioniert
- 10. Javascript Force GC-Sammlung?/Kraftvoll freies Objekt?
- 11. Wie verschiebt man ein Commit zwischen Zweigen?
- 12. GC erzwingen, wenn windbg/sos
- 13. Wie verschiebt man ein Element im DOM?
- 14. JVM GC degote Objekt zu eden Raum?
- 15. containsKey, wenn der Schlüssel ist ein Objekt
- 16. Aurelia validatejs funktioniert nicht, wenn an ein Objekt gebunden
- 17. Wie verschiebt man das Objekt an bestimmten Stellen in cocos2d
- 18. Unterdrücken der Ausgabe von gc()
- 19. Wie befreit man ein umschlossenes C++ - Objekt, wenn das assoziierte Javascript-Objekt in V8 gesammelt wird?
- 20. Wie verschiebt man ein Bild entlang eines Kreises in Android?
- 21. Der setLocation verschiebt Jlabel nicht, auch wenn ein Layout-Manager deaktiviert ist
- 22. GC-Pausendauer von GC-Protokollen
- 23. Java GC Frage: Wie kann ein Objekt unerreichbar werden, während eine seiner Methoden noch ausgeführt wird?
- 24. ein Objekt [] an ein params-Objekt übergeben [] funktioniert nicht
- 25. Bit verschiebt ein Zeichen mit Wrap? C++
- 26. Java, Wenn ein ziehbares Objekt ein anderes Objekt berührt
- 27. Programmatische Benachrichtigung der JVM GC-Ereignisse
- 28. Anwendung Benutzeroberfläche friert mit GC-Nachrichten ein
- 29. Android GC - LogCat immer zeigt GC-Aktivität
- 30. AppDomains und GC Heap