RFR(S) 8210875 Refactor CompactHashtable

Ioi Lam ioi.lam at oracle.com
Wed Sep 19 04:34:03 UTC 2018


Hi Jiangli,

Thanks for the review. Updated webrev:

http://cr.openjdk.java.net/~iklam/jdk12/8210875-refactor-compact-hash.v02/
http://cr.openjdk.java.net/~iklam/jdk12/8210875-refactor-compact-hash.v02.delta/


On 9/18/18 6:47 PM, Jiangli Zhou wrote:
> Hi Ioi,
>
> Looks good overall. Please see my comments below.
>
> - src/hotspot/share/classfile/compactHashtable.hpp
>
> 138 // CompactHashtable is used to stored the CDS archive's 
> symbol/string tables.
>
> Typo: stored. It's a preexisting issue.
>
>

Fixed

> +  V if_equals(const K key, int len, u4 offset) const {
> +    V value = DECODE(_base_address, offset);
> +    if (EQUALS(value, key, len)) {
> +      return value;
> +    } else {
> +      return NULL;
> +    }
> +  }
>
> +        V res = if_equals(key, len, entry[0]);
> +        if (res != NULL) {
> +          return res;
> +        }
>
> The name of if_equals() function is a bit confusing. I was going to 
> suggest a different name, but the function is only called in two 
> places and both call sites could simply do the following without 
> if_equals():
>
> V res = DECODE(_base_address, entry);
> if (EQUALS(res, key, len)) {
>   return res;
> }
>
>
That's a good suggestion. I further simplified it to:

   V decode(u4 offset) const {
     return DECODE(_base_address, offset);
   }
   ...


         V value = decode(entry[0]);
         if (EQUALS(value, key, len)) {
           return value;
         }


> - src/hotspot/share/classfile/stringTable.cpp
>
> +inline bool string_equals_compact_hashtable_entry(oop value, const 
> jchar* key, int len) {
> +  return java_lang_String::equals(value, (jchar*)key, len);
> +}
>
> Can java_lang_String::equals() be used for _shared_table for string 
> directly? Or you simply want to mirror the 
> symbol_equals_compact_hashtable_entry()?
>
I couldn't use java_lang_String::equals due to the mismatch of "const 
jchar*" vs "jchar*" in the signature. You can see the awkward (jchar*) 
type cast in the code above.

But I think what you suggested is better, so I fixed all the missing 
"const" in stringTable.hpp, javaClasses.hpp and utf8.hpp that are 
related to Strings. Now I can use java_lang_String::equals directly in 
the template instantiation.

>
> The _shared_table is only used for INCLUDE_CDS_JAVA_HEAP, can you 
> please move it under INCLUDE_CDS_JAVA_HEAP?
>
>   77 static CompactHashtable<
>   78   const jchar*, oop,
>   79   read_string_from_compact_hashtable,
>   80   string_equals_compact_hashtable_entry
>   81 > _shared_table;
>
>
Fixed.

Thanks
- Ioi

> Thanks,
> Jiangli
>
> On 9/18/18 10:35 AM, Ioi Lam wrote:
>> https://bugs.openjdk.java.net/browse/JDK-8210875
>> http://cr.openjdk.java.net/~iklam/jdk12/refactor-compact-hash.v01/
>>
>> The template class CompactHashtable contains code for symbols
>> and strings, which should really be provided by the instantiations
>> of this template (i.e., {StringTable,SymbolTable}::_shared_table).
>>
>> I have refactored CompactHashtable to make it similar to
>> ResourceHashtable.
>>
>> That way we can more easily create other instantiations, which would be
>> handy in JDK-8210388 (Use hash table to store archived subgraph_info
>> records.)
>>
>> Thanks
>> - Ioi
>



More information about the hotspot-runtime-dev mailing list