< prev index next >

src/share/vm/classfile/stringTable.cpp

Print this page

        

*** 92,106 **** volatile int StringTable::_parallel_claimed_idx = 0; CompactHashtable<oop, char> StringTable::_shared_table; // Pick hashing algorithm ! unsigned int StringTable::hash_string(const jchar* s, int len) { return use_alternate_hashcode() ? AltHashing::murmur3_32(seed(), s, len) : java_lang_String::hash_code(s, len); } oop StringTable::lookup_shared(jchar* name, int len) { // java_lang_String::hash_code() was used to compute hash values in the shared table. Don't // use the hash value from StringTable::hash_string() as it might use alternate hashcode. return _shared_table.lookup((const char*)name, java_lang_String::hash_code(name, len), len); --- 92,111 ---- volatile int StringTable::_parallel_claimed_idx = 0; CompactHashtable<oop, char> StringTable::_shared_table; // Pick hashing algorithm ! template<typename T> ! unsigned int StringTable::hash_string(const T* s, int len) { return use_alternate_hashcode() ? AltHashing::murmur3_32(seed(), s, len) : java_lang_String::hash_code(s, len); } + // Explicit instantiation for all supported types. + template unsigned int StringTable::hash_string<jchar>(const jchar* s, int len); + template unsigned int StringTable::hash_string<jbyte>(const jbyte* s, int len); + oop StringTable::lookup_shared(jchar* name, int len) { // java_lang_String::hash_code() was used to compute hash values in the shared table. Don't // use the hash value from StringTable::hash_string() as it might use alternate hashcode. return _shared_table.lookup((const char*)name, java_lang_String::hash_code(name, len), len);
*** 407,427 **** for (int i = 0; i < the_table()->table_size(); ++i) { HashtableEntry<oop, mtSymbol>* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { oop s = p->literal(); typeArrayOop value = java_lang_String::value(s); - int offset = java_lang_String::offset(s); int length = java_lang_String::length(s); if (length <= 0) { st->print("%d: ", length); } else { ResourceMark rm(THREAD); ! jchar* chars = (jchar*)value->char_at_addr(offset); ! int utf8_length = UNICODE::utf8_length(chars, length); ! char* utf8_string = NEW_RESOURCE_ARRAY(char, utf8_length + 1); ! UNICODE::convert_to_utf8(chars, length, utf8_string); st->print("%d: ", utf8_length); HashtableTextDump::put_utf8(st, utf8_string, utf8_length); } st->cr(); --- 412,440 ---- for (int i = 0; i < the_table()->table_size(); ++i) { HashtableEntry<oop, mtSymbol>* p = the_table()->bucket(i); for ( ; p != NULL; p = p->next()) { oop s = p->literal(); typeArrayOop value = java_lang_String::value(s); int length = java_lang_String::length(s); + bool is_latin1 = java_lang_String::is_latin1(s); if (length <= 0) { st->print("%d: ", length); } else { ResourceMark rm(THREAD); ! int utf8_length; ! char* utf8_string; ! ! if (!is_latin1) { ! jchar* chars = value->char_at_addr(0); ! utf8_length = UNICODE::utf8_length(chars, length); ! utf8_string = UNICODE::as_utf8(chars, length); ! } else { ! jbyte* bytes = value->byte_at_addr(0); ! utf8_length = UNICODE::utf8_length(bytes, length); ! utf8_string = UNICODE::as_utf8(bytes, length); ! } st->print("%d: ", utf8_length); HashtableTextDump::put_utf8(st, utf8_string, utf8_length); } st->cr();
< prev index next >