1. java Object类的hashCode()方法是一个本地方法, 会调用c++方法。
1.1. Object.java中的hashCode()方法: public native int hashCode();
1.2. Object对象的hashCode()方法在C语言文件Object.c中实现。下载openjdk.zip, 打开\openjdk\jdk\src\share\native\java\lang\目录, 查看Object.c文件, 可以看到hashCode()的方法被注册成有JVM_IHashCode方法指针来处理:

1.3. JVM_IHashCode方法指针在\openjdk\hotspot\src\share\vm\prims目录中的jvm.cpp中实现,可以看出JVM_IHashCode方法中调用了ObjectSynchronizer::FastHashCode方法:

1.4. ObjectSynchronizer::FastHashCode方法在\openjdk\hotspot\src\share\vm\runtime目录中的synchronizer.cpp中实现:

2. String类的hashCode()方法

3. hashCode()的返回值不能保证唯一性。
本文详细探讨了Java中Object类的hashCode()方法的实现过程,从Object.java的native方法声明到C语言的Object.c源码,再到HotSpot虚拟机内部的JVM_IHashCode和ObjectSynchronizer::FastHashCode方法。了解到hashCode()返回值并不保证唯一,并且其在内存布局和同步策略上的考量。
3162

被折叠的 条评论
为什么被折叠?



