如果Java的垃圾收集器移动对象,那么Object.hashCode和System.identityHashCode是什么?

2024-05-30

我经常听说这些方法(Object.hashCode and System.identityHashCode) 返回对象的地址,或从地址快速计算出的内容;但我也很确定垃圾收集器会移动并压缩对象。由于哈希码无法更改,因此这就出现了问题。我知道这不是日常工作中需要了解的东西,但我想了解其内部原理。那么,有谁知道这是如何在Java中实现的吗?或者.NET,因为它们可能很相似。


.NET 的实现故意不发布(当您尝试反编译它时,您会发现它进行了非托管框架调用)。唯一的文档是here http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx,它仅声明“不保证为每个对象生成不同的值”,并且“可能会在框架版本之间发生变化”。对它的实际工作原理做出任何假设可能都是不明智的。

Java 的更容易理解(尽管可能在不同的 JVM 中可能有所不同),并且在这个问题中进行了专门讨论:由于权属空间的压缩,.hashcode() 会返回不同的 int 吗? https://stackoverflow.com/questions/3796699/will-hashcode-return-different-int-due-to-cmpaction-of-tenure-space

Java 实现的要点是,按照约定,对象的哈希码的值在第一次检索之前是不相关的。此后,它必须保持不变。因此,在第一次调用对象的 hashcode() 方法之前,GC 移动对象并不重要。之后,将使用缓存的值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果Java的垃圾收集器移动对象,那么Object.hashCode和System.identityHashCode是什么? 的相关文章

随机推荐

  • 部署应用程序时“matplotlib”没有属性“cm”

    我正在尝试部署一个使用 Dash 开发的应用程序 该应用程序使用一些 matplotlib 函数 当我在本地运行应用程序时 它运行顺利并且一切正常 但是 当我使用相同的代码部署它时 我使用heroku进行部署 安装的 matplotlib
  • 在 Safari 中提交表单后无法对 DOM 进行样式更改

    在 Safari 中提交表单后 我在对 DOM 进行样式更改时遇到问题 有谁知道它是否可能 这是 Safari 预期的浏览器行为吗 我设置了一个非常简单的示例 以便您可以看到实际问题 http jamesmichaelking com st
  • Jquery文件上传插件进度条

    这个插件 https github com blueimp jQuery File Upload wiki管理网页中的文件上传 并且可以在上传过程中添加很多 UI 元素 您创建一个输入文件类型元素 然后绑定 js 文件 使用实例化代码和 w
  • Flask 不加载配置

    我在 Flask 中加载配置时遇到问题 from config import config DevelopmentConfig TestingConfig ProductionConfig def create app config nam
  • 如何使用itext7缩放固定矩形内的文本?

    我正在尝试使用 c 中的 itext7 制作一个 pdf 文档 该文档应该具有包含不同文本的固定矩形 这些文本应该在 不可见 矩形的边界内缩放 我试图寻找是否有自动缩放功能 但到目前为止只发现表单域的自动缩放功能 由于 pdf 将用于绘制文
  • PHP UTF-8 问题 - 如果我在 PHP 中创建一个字符串...它是 UTF-8 格式吗?

    在 PHP 中 如果我创建一个像这样的字符串 str bla bla here is my string 然后我可以使用 mbstring 函数将该字符串作为 UTF8 进行操作吗 Will this work str mb strlen
  • C# 中什么时候必须使用 extern 别名关键字?

    我们什么时候必须使用extern aliasC 中的关键字 基本上 只有当您想要使用来自不同程序集的具有相同完全限定名称 相同命名空间 相同类型名称 的两种类型时 您才真正需要它 您为每个程序集声明不同的别名 以便您可以通过该别名引用它们
  • 使用列的长度过滤 DataFrame

    我想过滤一个DataFrame使用与列长度相关的条件 这个问题可能很简单 但我在SO中没有找到任何相关问题 更具体地说 我有一个DataFrame只有一个Column哪一个ArrayType StringType 我想过滤DataFrame
  • 如何在useEffect中调用useNavigate? - 用于 Ant Design - Mobile 中的底部导航

    我是反应新手 我正在使用 AntD mobile 制作一个应用程序 对于底部导航 我正在利用AntD mobile 中的 tabBar 组件 https mobile ant design components tab bar 我不知道如何
  • 喜欢和不喜欢用户对产品的评论

    用户架构 var UserSchema new Schema review likes type String review dislikes type String 审查架构 var ReviewSchema new Schema pro
  • 使用 CLPlacemark、administrativeArea、iOS6/iOS7 更改内容

    我计划为 ios 7 制作一个应用程序 并且有管理区域地标属性的问题 对于 iOS6 我得到行政区域的全名 例如 加利福尼亚 但对于 iOS7 我得到 CA 的值 当情况如此变化时 这是一个问题 有什么方法可以控制这个输入 使其更加一致吗
  • 共享工作线程在重新加载页面时终止

    为什么 Shared Worker 在重新加载页面时死掉了 应该是复活了我该如何解决这个问题 重新加载前 重新加载后 在 example com 上按 F5 家长工人 var port new SharedWorker app worker
  • iPhone触摸形状或原始数据

    有人知道是否可以检测触摸形状吗 也许通过获取原始触摸屏数据 我在这里找到了这个问题 答案 如何获取原始触摸屏数据 https stackoverflow com questions 789737 iphone raw touchscreen
  • Visual Studio 插件开发第一步

    我想为 Visual Studio 制作一个插件 但我不知道从哪里开始 虽然找到 Eclipse 插件开发指南非常容易 但我很难找到好的 VS 插件开发指南 我想我想问的是 我从哪里开始 我建议从这里开始 http www mztools
  • 新的 iTunes 连接界面错误“您必须选择一个版本”

    当尝试将我的新应用程序提交到应用程序商店时 我注意到苹果已经更改了其网站界面 更新元数据和关键字并点击 提交审核 后 我收到错误 您必须选择一个版本 通过谷歌搜索 我没有找到答案 但是 我注意到 构建 标题旁边有一个加号按钮 您必须在其中选
  • Google 应用引擎 100 个 URLMap 条目限制

    我一直在使用Google应用程序引擎来构建我的网站 并遇到了关于URLMap最大数量的问题 我有101个URL 但限制是100 这是错误消息 Fatal error when loading application configuratio
  • Spring引导@Configurable

    我正在尝试配置Autowired在 Spring Boot 应用程序下的非 Spring 托管类中 我在部署在 tomcat 服务器下的 Web 应用程序下成功运行了这个 但是当我想在 Spring Boot 下运行它时 没有任何效果 我制
  • 如何使用 Espresso 访问外部网站上的元素

    使用 espresso 我们单击 登录 按钮 该按钮将启动一个外部网站 Chrome 自定义选项卡 您可以在其中登录 然后重定向回我们的 Android 应用程序 Espresso 有没有办法 1 验证正在启动的 URL 是否正确2 访问网
  • SQL Server 之间

    我有一个表 其中有年 月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 2012 01 50 2012 02 200 现在 我想要SELECT2011 年 11 月至
  • 如果Java的垃圾收集器移动对象,那么Object.hashCode和System.identityHashCode是什么?

    我经常听说这些方法 Object hashCode and System identityHashCode 返回对象的地址 或从地址快速计算出的内容 但我也很确定垃圾收集器会移动并压缩对象 由于哈希码无法更改 因此这就出现了问题 我知道这不