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

64位JVM上对象的默认哈希值是多少

翁俊良
2023-03-14
问题内容

由于对象的默认哈希值是该对象的对象地址,因此在32位计算机上,考虑哈希值是int值是有意义的。我的问题是在64位计算机上,地址应该是64位吗?那么32位int哈希值呢?是否会有一些下变频(从64位到32位)?


问题答案:

我的问题是64位JVM上对象的默认哈希值是多少?它仍然是对象地址值吗?

未指定“默认”值……或更具体地说,如何计算对象的“身份哈希码”。不在32位JVM或64位JVM上。

可以观察到,通常 首次 调用该System.identityHashcode()方法时,该值 基于
对象的地址,但这仅仅是一个观察。当然并 没有 明确指出,这意味着不同的JVM可以自由地以不同的方式实现它。

当然,它不能是64位JVM上的实际地址…因为64位地址不适合32位整数。明显。

尽管它是经过实际计算的,但仍然存在这样的事实,即身份哈希码 永远 不是对象地址的可靠代理。如果具有标识哈希码的对象在垃圾回收周期中幸免,则GC
可能 已将其移动,并且其哈希码和地址此后将不相关。(可以保证的是,对象的身份哈希码不会更改。如果更改,则哈希表将中断。)



 类似资料:
  • 问题内容: 当未设置相同名称的环境变量时,是否可以确保将GOMAXPROCS设置为1? 此代码显示值: 并像这样运行它: 显示在这种情况下为1,但我在这里寻找一些确认。 问题答案: UPDATE 2018: 默认情况下,Go程序在将GOMAXPROCS设置为可用内核数的情况下运行;在以前的版本中,它默认为1。 从Go 1.5开始,默认值为核心数。如果您在较新的Go版本中对此不满意,则只需要显式设置

  • 问题内容: http://selenium.googlecode.com/svn/trunk/docs/api/dotnet/html/M_OpenQA_Selenium_Chrome_ChromeDriver__ctor_4.htm 有人知道chromedriver commandtimeout的默认值是什么吗?做了谷歌搜索,但找不到任何东西。 问题答案: 记住Selenium是开源的。 您可以

  • 问题内容: 当然,在32位系统中可以设置的理论最大堆值是字节,但是通常(请参阅:了解最大JVM堆大小 -32 位vs64位),一个人不能使用全部4GB。 对于在64位计算机上的64位OS中运行的64位JVM,除了理论上的字节数限制或16艾字节之外,是否还有其他限制? 我知道由于种种原因(主要是垃圾回收),过大的堆可能不是 明智的选择 ,但是鉴于阅读了有关具有terrabytes RAM的服务器的信

  • 问题内容: 从这个问题出发,我很想知道何时 计算 python对象的哈希值? 在某个实例的时间 第一次叫 每次都被调用,或者 我还有其他机会吗? 这可能会根据对象的类型而有所不同吗? 为什么其他整数等于其哈希值呢? 问题答案: 通常可以在每次使用哈希时进行计算,因为您可以很容易地检查一下自己(请参阅下文)。当然,任何特定对象都可以自由缓存其哈希。例如,CPython字符串执行此操作,但元组不执行此

  • 问题内容: UTF-8是Java中的默认编码吗? 如果没有,我怎么知道默认使用哪种编码? 问题答案: JVM的默认字符集是运行它的系统的默认字符集。对此没有特定的值,并且通常不应将默认编码视为任何特定的值。 可以在运行时通过对其进行访问,尽管这对你有用,但实际上你应该始终在明确指定编码的情况下这样做。

  • 问题内容: 最近,我一直在对我公司的数据库产品的写入性能进行一些基准测试,并且发现仅切换到64位JVM可以使性能持续提高20-30%。 我不允许详细介绍我们的产品,但基本上它是面向列的数据库,已针对存储日志进行了优化。基准测试包括向其提供几GB的原始日志,并确定分析它们并将其作为结构化数据存储在DB中所需的时间。CPU和I / O的处理非常繁重,尽管很难说是什么比例。 有关设置的一些注意事项: 两