< prev index next >
src/hotspot/share/classfile/classLoaderStats.hpp
Print this page
rev 59248 : 8244777: ClassLoaderStats VM Op uses constant hash value
@@ -100,12 +100,19 @@
static bool oop_equals(oop const& s1, oop const& s2) {
return s1 == s2;
}
static unsigned oop_hash(oop const& s1) {
- unsigned hash = (unsigned)((uintptr_t)&s1);
- return hash ^ (hash >> LogMinObjAlignment);
+ uintptr_t tmp = cast_from_oop<uintptr_t>(s1);
+ unsigned hash = (unsigned)tmp;
+ hash = ~hash + (hash << 15);
+ hash = hash ^ (hash >> 12);
+ hash = hash + (hash << 2);
+ hash = hash ^ (hash >> 4);
+ hash = hash * 2057;
+ hash = hash ^ (hash >> 16);
+ return hash;
}
typedef ResourceHashtable<oop, ClassLoaderStats*,
ClassLoaderStatsClosure::oop_hash, ClassLoaderStatsClosure::oop_equals> StatsTable;
< prev index next >