< prev index next >

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

Print this page

        

*** 349,366 **** 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(); } ! hash = java_lang_String::hash_code(java_string); ! } else { // Compute hash hash = hash_code(value, latin1); stat->inc_hashed(); } typeArrayOop existing_value = lookup_or_add(value, latin1, hash); if (oopDesc::equals_raw(existing_value, value)) { // Same value, already known --- 349,371 ---- bool latin1 = java_lang_String::is_latin1(java_string); unsigned int hash = 0; if (use_java_hash()) { ! // Get hash code from cache ! hash = java_lang_String::hash(java_string); } ! ! 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 >