data-structures - 按地址散列对象并复制垃圾收集
问题描述
有时创建一个哈希表很方便,其中哈希函数使用哈希对象的地址。散列函数易于实现且执行成本低。
但是,如果您在使用某种形式的复制垃圾收集的系统上工作,则会出现问题,因为在移动对象后,先前计算的哈希值不正确。即使在垃圾收集期间或之后重新散列表似乎也存在问题,因为(原则上)散列函数可能会消耗内存并触发另一个垃圾收集。
我的问题是如何解决这些问题。如果没有某种妥协,我没有看到任何干净的解决方案。
解决方案
如何解决此问题取决于所使用的特定编程语言的特定生态系统提供的工具。
例如,在 C# 中,可以RuntimeHelpers.GetHashcode()
用于获取一个哈希值,该哈希值保证不会在对象的整个生命周期内发生变化,即使发生垃圾回收并且对象的物理地址在内存中发生变化也是如此。
推荐阅读
- c - 将子进程作为父进程运行
- python - 将 Python textwrap.shorten 用于字符串但具有字节宽度
- c++ - 在一个非常量成员函数中,为什么指向这个非常量,而decltype指针这个是常量?
- android - 开始新意图后旧活动会发生什么?
- webgl - WebGL 着色器缓存是否可行?
- kubernetes - 更快地终止 k8s pod
- c++ - GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则会出错
- elixir - 如何重载相等运算符?
- java - 在动作侦听器中使用时,如果语句不起作用
- android-room - 为什么 Room 要求您列出实体?