comparison src/share/vm/classfile/javaClasses.cpp @ 6162:e9140bf80b4a

7158800: Improve storage of symbol tables Summary: Use an alternate version of hashing algorithm for symbol string tables and after a certain bucket size to improve performance Reviewed-by: pbk, kamg, dlong, kvn, fparain
author coleenp
date Wed, 13 Jun 2012 19:52:59 -0400
parents 8f972594effc
children 58ad5f22317e
comparison
equal deleted inserted replaced
6129:4d399f013e5a 6162:e9140bf80b4a
21 * questions. 21 * questions.
22 * 22 *
23 */ 23 */
24 24
25 #include "precompiled.hpp" 25 #include "precompiled.hpp"
26 #include "classfile/altHashing.hpp"
26 #include "classfile/javaClasses.hpp" 27 #include "classfile/javaClasses.hpp"
27 #include "classfile/symbolTable.hpp" 28 #include "classfile/symbolTable.hpp"
28 #include "classfile/vmSymbols.hpp" 29 #include "classfile/vmSymbols.hpp"
29 #include "code/debugInfo.hpp" 30 #include "code/debugInfo.hpp"
30 #include "code/pcDesc.hpp" 31 #include "code/pcDesc.hpp"
345 result[index] = value->char_at(index + offset); 346 result[index] = value->char_at(index + offset);
346 } 347 }
347 return result; 348 return result;
348 } 349 }
349 350
350 unsigned int java_lang_String::hash_string(oop java_string) { 351 unsigned int java_lang_String::to_hash(oop java_string) {
352 int length = java_lang_String::length(java_string);
353 // Zero length string will hash to zero with String.toHash() function.
354 if (length == 0) return 0;
355
351 typeArrayOop value = java_lang_String::value(java_string); 356 typeArrayOop value = java_lang_String::value(java_string);
352 int offset = java_lang_String::offset(java_string); 357 int offset = java_lang_String::offset(java_string);
358 return java_lang_String::to_hash(value->char_at_addr(offset), length);
359 }
360
361 unsigned int java_lang_String::hash_string(oop java_string) {
353 int length = java_lang_String::length(java_string); 362 int length = java_lang_String::length(java_string);
354 363 // Zero length string doesn't hash necessarily hash to zero.
355 if (length == 0) return 0; 364 if (length == 0) {
356 return hash_string(value->char_at_addr(offset), length); 365 return StringTable::hash_string(NULL, 0);
366 }
367
368 typeArrayOop value = java_lang_String::value(java_string);
369 int offset = java_lang_String::offset(java_string);
370 return StringTable::hash_string(value->char_at_addr(offset), length);
357 } 371 }
358 372
359 Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) { 373 Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) {
360 oop obj = java_string(); 374 oop obj = java_string();
361 typeArrayOop value = java_lang_String::value(obj); 375 typeArrayOop value = java_lang_String::value(obj);