java Object的hashCode方法怎么使用
导读:本文共3165字符,通常情况下阅读需要11分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 1. 背景介绍在为重写hashCode方法的时候,看到hashCode打印出的数据像是一个地址值,很是好奇。加之最近在研读jvm源码,特此一探究竟,看看在hotspot中hashCode究竟是如何实现的。2. 调用过程梳理java的Object代码publicnativeinthashCode();通过官产jdk的Object.class的源码, 发现hashC... ...
目录
(为您整理了一些要点),点击可以直达。在为重写hashCode方法的时候,看到hashCode打印出的数据像是一个地址值,很是好奇。
加之最近在研读jvm源码,特此一探究竟,看看在hotspot中hashCode究竟是如何实现的。
通过官产jdk的Object.class的源码, 发现hashCode被native修饰. 因此这个方法应该是在jvm中通过c/c++实现
首先观察Object.java对应的Object.c代码
进一步进入到jvm.h文件中, 这个文件中包含了很多java调用native方法的接口
进入到ObjectSynchronizer::FastHashCode
生成hashCode的方法get_next_hash, 可以支持通过参数配置不同的生成hashCode策略
前面以及提交到hashCode生成后, 是存储在markword中, 我们在深入看一下这个markword
通过-XX:hashCode=2这种形式, 可以验证上述的5中hashCode生成策略
在64位jvm中, hashCode最大占用31个bit; 32位jvm中, hashCode最大占用25个bit
hashCode一共有六种生成策略
默认策略采用策略6, 在globals.hpp文件中定义
java Object的hashCode方法怎么使用的详细内容,希望对您有所帮助,信息来源于网络。