如果我理解正确,在.NET中,默认实现Object.GetHashCode()返回一个基于对象的内存地址的值(至少对于引用类型).但是,垃圾收集器可以在内存中自由移动对象.据推测,哈希代码不会因为GC移动对象而改变,所以这种交互是否有特殊处理,或者我的假设是错误的?
Jon*_*eet 21
它不会根据地址返回值.它返回基于对象的同步块的值.
同步块在第一次object.GetHashCode被调用时(未被覆盖时)或对象的锁争用.(如果你调用Wait/Pulse/PulseAll也可以分配它,我还没看过.)
同步块独立于对象主数据在内存中的位置.基本上(据我所知),有一个用于同步块的大表 - 它以某种方式保持高效,部分原因是并非每个对象都需要一个(只有需要系统哈希码或锁定的对象).
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |