Mercurial > hg > truffle
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); |