RFR(S) 8210875 Refactor CompactHashtable
Ioi Lam
ioi.lam at oracle.com
Wed Sep 19 21:46:07 UTC 2018
Hi Calvin,
Thanks for the review. I've added the #ifdefs as you suggested, and
tested that it worked with a minimal build (which excludes CDS).
http://cr.openjdk.java.net/~iklam/jdk12/8210875-refactor-compact-hash.v03.delta/
Thanks
- Ioi
On 09/19/2018 11:11 AM, Calvin Cheung wrote:
> Hi Ioi,
>
> Just a quick question in compactHashTable.[c|h]pp, I’m wondering if
> the CompactHashtableWriter can be enclosed within #ifdef INCLUDE_CDS?
> Its usage in StringTable is enclosed within #ifdef
> INCLUDE_CDS_JAVA_HEAP and its usage in SymbolTable is enclosed within
> #ifdef INCLUDE_CDS.
>
> thanks,
> Calvin
>
> On 9/18/18, 9:34 PM, Ioi Lam wrote:
>> 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