Si entiendo correctamente, en .NET la implementación predeterminada de Object.GetHashCode()
devuelve un valor basado en la dirección de memoria de un objeto (al menos para los tipos de referencia). Sin embargo, el recolector de basura es libre de mover objetos en la memoria. Presumiblemente, el código hash no cambia solo porque el GC mueve un objeto, ¿existe un manejo especial para esta interacción o mis suposiciones son incorrectas?¿Cómo funciona Object.GetHashCode cuando el GC mueve un objeto?
22
A
Respuesta
21
No devuelve un valor basado en la dirección. Devuelve un valor basado en el bloque de sincronización para el objeto.
El bloque de sincronización se asigna la primera vez object.GetHashCode
se llama (cuando no se reemplaza) o hay contención en la cerradura para el objeto. (Puede asignarse si llama también a Wait/Pulse/PulseAll, no he buscado).
El bloque de sincronización es independiente de la ubicación de los datos principales del objeto en la memoria. Básicamente (como yo lo entiendo) hay una gran tabla para bloques de sincronización, que se mantiene eficiente de alguna manera, en parte debido a que no todos los objetos lo requieren (solo aquellos en los que se requiere código de sistema o bloqueo).
Cuestiones relacionadas
- 1. Advertencia: "... anula Object.Equals (objeto o) pero no anula Object.GetHashCode()"
- 2. Detectando cuando el mouse no se mueve
- 3. ¿El objeto Do Timer obtiene GC-ed cuando ningún otro objeto los referencia?
- 4. Contando el número de GC limpiadas en un objeto
- 5. ¿cómo elimino/gc un objeto en Actionscript 3?
- 6. ¿Cómo funciona un objeto classmethod?
- 7. Xcode pierde historial de git cuando mueve un archivo
- 8. ¿Object.GetHashCode() es exclusivo de una referencia o un valor?
- 9. Mantener el objeto en intento de destrucción de GC
- 10. ¿Cómo funciona el objeto separado en hibernación?
- 11. FtpWebRequest mueve el archivo
- 12. Eventos de mouse Java ignorados cuando el mouse se mueve?
- 13. ¿Cómo identificar el subproceso GC Finalizer?
- 14. ¿Cómo debo implementar Object.GetHashCode() para la igualdad compleja?
- 15. cómo anexar registro gc
- 16. Marcado de un objeto que se va a eliminar en el GC
- 17. ¿Destrozará el GC de .NET un objeto abandonado ejecutando un método de forma asíncrona?
- 18. ¿Fijar un objeto en el LOH afecta el rendimiento del GC?
- 19. redimensionando un UIScrollView con el bloque Animation mueve el origen
- 20. Cómo deserializar un objeto persistido en un db ahora cuando el objeto tiene un serialVersionUID diferente
- 21. Javascript force GC collection?/¿Objeto con fuerza libre?
- 22. ¿Cómo funciona RAII cuando un constructor lanza una excepción?
- 23. ¿Cómo calcula C# el código hash de un objeto?
- 24. ¿WeakHashMap se borra durante un GC completo?
- 25. ¿Cómo libera un objeto envuelto de C++ cuando el objeto Javascript asociado es basura recolectada en V8?
- 26. git sincronización del repositorio entre computadoras, cuando se mueve?
- 27. ¿Ocultar elemento div con jQuery, cuando el mouse no se mueve durante un período de tiempo?
- 28. Usar argumentos JVM GC -XX: SurvivorRatio = 8 no funciona
- 29. jQuery no se activa cuando el elemento se mueve programáticamente con el mouse
- 30. ¿Cómo hacer que un div desaparezca al pasar el mouse sin que parpadee cuando se mueve el mouse?