Skip to content

Commit

Permalink
8325600: Better symbol storage
Browse files Browse the repository at this point in the history
Reviewed-by: mbalao, andrew
Backport-of: da06689bf6fde7b6dd8efc2f0c39fc95adcdb69d
  • Loading branch information
Aleksei Voitylov authored and gnu-andrew committed Jul 6, 2024
1 parent dfbb2cf commit 18b3ca5
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions hotspot/src/share/vm/classfile/symbolTable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -237,17 +237,22 @@ unsigned int SymbolTable::hash_symbol(const char* s, int len) {
// safepoints).

// Symbols should represent entities from the constant pool that are
// limited to 64K in length, but usage errors creep in allowing Symbols
// limited to <64K in length, but usage errors creep in allowing Symbols
// to be used for arbitrary strings. For debug builds we will assert if
// a string is too long, whereas product builds will truncate it.
Symbol* SymbolTable::lookup(const char* name, int len, TRAPS) {
static int check_length(const char* name, int len) {
assert(len <= Symbol::max_length(),
"String length exceeds the maximum Symbol length");
if (len > Symbol::max_length()) {
warning("A string \"%.80s ... %.80s\" exceeds the maximum Symbol "
"length of %d and has been truncated", name, (name + len - 80), Symbol::max_length());
len = Symbol::max_length();
}
return len;
}

Symbol* SymbolTable::lookup(const char* name, int len, TRAPS) {
len = check_length(name, len);
unsigned int hashValue = hash_symbol(name, len);
int index = the_table()->hash_to_index(hashValue);

Expand Down Expand Up @@ -387,7 +392,8 @@ void SymbolTable::add(ClassLoaderData* loader_data, constantPoolHandle cp,

Symbol* SymbolTable::new_permanent_symbol(const char* name, TRAPS) {
unsigned int hash;
Symbol* result = SymbolTable::lookup_only((char*)name, (int)strlen(name), hash);
int len = check_length(name, (int)strlen(name));
Symbol* result = SymbolTable::lookup_only((char*)name, len, hash);
if (result != NULL) {
return result;
}
Expand All @@ -396,7 +402,7 @@ Symbol* SymbolTable::new_permanent_symbol(const char* name, TRAPS) {

SymbolTable* table = the_table();
int index = table->hash_to_index(hash);
return table->basic_add(index, (u1*)name, (int)strlen(name), hash, false, THREAD);
return table->basic_add(index, (u1*)name, len, hash, false, THREAD);
}

Symbol* SymbolTable::basic_add(int index_arg, u1 *name, int len,
Expand Down

0 comments on commit 18b3ca5

Please sign in to comment.