< 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 >