当前位置: 首页 > 面试题库 >

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

巫欣荣
2023-03-14
问题内容

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


问题答案:

.NET的实现有意未发布(当您尝试对其进行反编译时,您会发现它进行了非托管框架调用)。这样的唯一文档在这里,它仅声明“不能保证为每个对象产生不同的值”,并且“可以在框架版本之间进行更改”。对它的实际工作方式做任何假设可能都是不明智的。

Java的理解更充分(尽管可能在JVM之间可能有所不同),并且在以下问题中专门介绍了Java:[由于使用权空间的压缩,.hashcode()是否会返回不同的int?

Java实现的要点是,根据合同,对象的哈希码的值在第一次检索之前是不相关的。在那之后,它必须保持恒定。因此,在第一次调用对象的hashcode()方法之前,移动对象的GC无关紧要。之后,将使用缓存的值。



 类似资料:
  • 问题内容: 什么是JavaScript垃圾回收?为了编写更好的代码,对于Web程序员来说,了解JavaScript垃圾回收有什么重要意义? 问题答案: 从该页面引用: JScript使用了非世代的标记清除垃圾收集器。它是这样的: 每个“范围内”的变量都称为“清除剂”。清道夫可以指数字,对象,字符串等。我们维护一个清道夫列表- 变量进入作用域时将移入scav列表,超出范围时将其移出scav列表。 垃

  • 问题内容: 我要求显式垃圾回收器调用。但是窗口并没有从屏幕上消失,为什么垃圾回收器不回收JFrame的对象? 问题答案: 当被创建时,它注册本身在一些内部摇摆的数据结构,其允许它接收到类似的鼠标点击的事件。这意味着在您告诉Swing使用摆脱窗口之前,存在对潜伏在某处的对象的引用。

  • 问题内容: 我是Java新手,对Java中的垃圾收集器感到困惑。它实际上是做什么的,什么时候生效。请描述Java中垃圾收集器的一些属性。 问题答案: 该垃圾收集器是运行在一个程序的Java虚拟机,其摆脱其未使用的Java应用程序了对象。它是自动内存管理的一种形式。 当典型的Java应用程序运行时,它正在创建新的对象,例如和,但是在一段时间之后,这些对象将不再使用。例如,看下面的代码: 在上面的代码

  • 有人能给我解释一下原因吗?

  • 问题内容: 我对Java中的垃圾回收如何工作感到有些困惑。 我得到一个对象,当它不再有实时引用时,就可以进行垃圾回收,但是如果它引用了实时对象又该怎么办? 可以说我有一个节点集合,再次引用了更多节点 现在,如果我删除列表,则应该对节点cd和e进行垃圾回收。节点e没有更多引用,而节点c和d具有循环引用。 但是节点a呢?会被垃圾收集吗? 节点b是否具有外部实时引用会有所不同吗?假设节点b从另一个地方引

  • 本文向大家介绍常见的垃圾回收器有那些? 相关面试题,主要包含被问及常见的垃圾回收器有那些? 时的应答技巧和注意事项,需要的朋友参考一下 如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较,但并非要挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做的就是根据具体应用场景选择适合自己的垃圾收集器。试