gpt4 book ai didi

.net - GC 移动对象时 Object.GetHashCode 是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 11:28:39 24 4
gpt4 key购买 nike

如果我理解正确,在 .NET 中 Object.GetHashCode() 的默认实现根据对象的内存地址返回一个值(至少对于引用类型)。但是,垃圾收集器可以自由地在内存中移动对象。大概哈希码不会仅仅因为 GC 移动一个对象而改变,那么这种交互是否有特殊处理,或者我的假设是错误的?

最佳答案

它不会根据地址返回值。它根据对象的同步块(synchronized block)返回一个值。

第一次分配同步块(synchronized block)object.GetHashCode被调用(当没有被覆盖时)或者对象的锁存在争用。 (如果你也调用Wait/Pulse/PulseAll可能会分配,我没看过。)

同步块(synchronized block)独立于对象的主要数据在内存中的位置。基本上(据我所知)有一个用于同步块(synchronized block)的大表 - 它以某种方式保持高效,部分原因是并非每个对象都需要一个(仅需要系统哈希码或锁定的对象)。

关于.net - GC 移动对象时 Object.GetHashCode 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com