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