--- old/src/hotspot/share/classfile/stringTable.cpp 2018-09-18 21:28:57.555685934 -0700 +++ new/src/hotspot/share/classfile/stringTable.cpp 2018-09-18 21:28:57.307676381 -0700 @@ -63,22 +63,19 @@ // If we have as many dead items as 50% of the number of bucket #define CLEAN_DEAD_HIGH_WATER_MARK 0.5 -// -------------------------------------------------------------------------- +#if INCLUDE_CDS_JAVA_HEAP inline oop read_string_from_compact_hashtable(address base_address, u4 offset) { assert(sizeof(narrowOop) == sizeof(offset), "must be"); narrowOop v = (narrowOop)offset; return HeapShared::decode_from_archive(v); } -inline bool string_equals_compact_hashtable_entry(oop value, const jchar* key, int len) { - return java_lang_String::equals(value, (jchar*)key, len); -} - static CompactHashtable< const jchar*, oop, read_string_from_compact_hashtable, - string_equals_compact_hashtable_entry + java_lang_String::equals > _shared_table; +#endif // -------------------------------------------------------------------------- StringTable* StringTable::_the_table = NULL; @@ -151,7 +148,7 @@ *is_dead = true; return false; } - bool equals = java_lang_String::equals(val_oop, (jchar*)_str, _len); + bool equals = java_lang_String::equals(val_oop, _str, _len); if (!equals) { return false; } @@ -253,7 +250,7 @@ return lookup(chars, length); } -oop StringTable::lookup(jchar* name, int len) { +oop StringTable::lookup(const jchar* name, int len) { unsigned int hash = java_lang_String::hash_code(name, len); oop string = StringTable::the_table()->lookup_shared(name, len, hash); if (string != NULL) { @@ -280,7 +277,7 @@ } }; -oop StringTable::do_lookup(jchar* name, int len, uintx hash) { +oop StringTable::do_lookup(const jchar* name, int len, uintx hash) { Thread* thread = Thread::current(); StringTableLookupJchar lookup(thread, hash, name, len); StringTableGet stg(thread); @@ -325,7 +322,7 @@ return result; } -oop StringTable::intern(Handle string_or_null_h, jchar* name, int len, TRAPS) { +oop StringTable::intern(Handle string_or_null_h, const jchar* name, int len, TRAPS) { // shared table always uses java_lang_String::hash_code unsigned int hash = java_lang_String::hash_code(name, len); oop found_string = StringTable::the_table()->lookup_shared(name, len, hash); @@ -363,7 +360,7 @@ } }; -oop StringTable::do_intern(Handle string_or_null_h, jchar* name, +oop StringTable::do_intern(Handle string_or_null_h, const jchar* name, int len, uintx hash, TRAPS) { HandleMark hm(THREAD); // cleanup strings created Handle string_h; @@ -792,7 +789,7 @@ // Sharing #if INCLUDE_CDS_JAVA_HEAP -oop StringTable::lookup_shared(jchar* name, int len, unsigned int hash) { +oop StringTable::lookup_shared(const jchar* name, int len, unsigned int hash) { assert(hash == java_lang_String::hash_code(name, len), "hash must be computed using java_lang_String::hash_code"); return _shared_table.lookup(name, hash, len);