RFR(T): 8219554: Redundant lookup_common in SymbolTable::add
Ioi Lam
ioi.lam at oracle.com
Fri Feb 22 00:55:42 UTC 2019
Hi Claes,
Before your change, there's no API requirement that you must have called
SymbolTable::lookup_common before calling SymbolTable::add, even though
that is the behavior of the classFileParser.
So, in order to codify this new requirement, I think you should you
should add an assert:
+ assert(lookup_shared(name, len, hash) == NULL, "must have checked
already");
Symbol* sym = SymbolTable::the_table()->do_add_if_needed(name, len,
hash, c_heap, CHECK);
Thanks
- Ioi
On 2/21/19 2:06 PM, Claes Redestad wrote:
> Hi,
>
> the arguments passed to SymbolTable::add has already been through a call
> to lookup_common, so a small optimization is to remove the redundant
> call inside the add method:
>
> - the lookup_common already done in the class file parser ensures none
> of the symbols lives in the shared archive.
> - do_add_if_needed will do a quick get into the dynamic hash table
> anyhow.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8219554
> Patch: [1]
>
> Testing: tier1+2
>
> Thanks!
>
> /Claes
>
> [1]
> hg diff -r cc9359f8c563 src/hotspot/share/classfile/symbolTable.cpp
> --- a/src/hotspot/share/classfile/symbolTable.cpp Thu Feb 21
> 14:16:44 2019 +0100
> +++ b/src/hotspot/share/classfile/symbolTable.cpp Thu Feb 21
> 23:12:29 2019 +0100
> @@ -444,10 +444,7 @@
> const char *name = names[i];
> int len = lengths[i];
> unsigned int hash = hashValues[i];
> - Symbol* sym = SymbolTable::the_table()->lookup_common(name, len,
> hash);
> - if (sym == NULL) {
> - sym = SymbolTable::the_table()->do_add_if_needed(name, len,
> hash, c_heap, CHECK);
> - }
> + Symbol* sym = SymbolTable::the_table()->do_add_if_needed(name,
> len, hash, c_heap, CHECK);
> assert(sym->refcount() != 0, "lookup should have incremented the
> count");
> cp->symbol_at_put(cp_indices[i], sym);
> }
More information about the hotspot-runtime-dev
mailing list