< prev index next >

src/hotspot/share/gc/shared/stringdedup/stringDedupTable.cpp

Print this page

        

@@ -349,18 +349,23 @@
 
   bool latin1 = java_lang_String::is_latin1(java_string);
   unsigned int hash = 0;
 
   if (use_java_hash()) {
-    if (!java_lang_String::hash_is_set(java_string)) {
-      stat->inc_hashed();
+    // Get hash code from cache
+    hash = java_lang_String::hash(java_string);
     }
-    hash = java_lang_String::hash_code(java_string);
-  } else {
+
+  if (hash == 0) {
     // Compute hash
     hash = hash_code(value, latin1);
     stat->inc_hashed();
+
+    if (use_java_hash() && hash != 0) {
+      // Store hash code in cache
+      java_lang_String::set_hash(java_string, hash);
+    }
   }
 
   typeArrayOop existing_value = lookup_or_add(value, latin1, hash);
   if (oopDesc::equals_raw(existing_value, value)) {
     // Same value, already known
< prev index next >