RFR (M) 8213346 Re-implement shared dictionary
Jiangli Zhou
jiangli.zhou at oracle.com
Tue Nov 13 21:10:58 UTC 2018
Hi Ioi,
Looks good. I have following minor comments. No new webrev is needed for
me. The new shared system dictionary will help providing a cleaner
approach for the dynamic archiving.
- Please wrap check_constraint_offset() with #ifdef ASSERT.
- Please fix the format for line 1113. Spaces are needed before & after
= and <.
1113 for (int i=0; i<vc_array->length(); i++) {
Thanks,
Jiangli
On 11/13/18 12:48 PM, Ioi Lam wrote:
> Hi Jiangli,
>
> Thanks for the reviews. Here's the updated patch:
>
> http://cr.openjdk.java.net/~iklam/jdk12/8213346-shared-dict-using-compact-hashtable.v02/
>
>
> http://cr.openjdk.java.net/~iklam/jdk12/8213346-shared-dict-using-compact-hashtable.v02.delta/
>
>
>
> Please see my comments inline.
>
>
> On 11/12/18 9:52 PM, Jiangli Zhou wrote:
>> Hi Ioi,
>>
>> I came across the SystemDictionary::clear_invoke_method_table() call
>> in MetaspaceShared::preload_and_dump() while looking into dynamic
>> dumping. With your shared dictionary change, I think
>> clear_invoke_method_table() is no longer needed anymore. Could you
>> please check that?
>>
> Yes, this function is not needed anymore. I've removed it.
>
>
>>
>> On 11/9/18 12:22 PM, Jiangli Zhou wrote:
>>> Hi Ioi,
>>>
>>> This looks clean overall! I only have the following comments for
>>> systemDictionaryShared.cpp.
>>>
>>> - share/classfile/systemDictionaryShared.cpp
>>>
>>> _num_constraints * 2
>>>
>>> Please use a macro or a static function for the various
>>> '_num_constraints * 2', which is less error-prone and easier to
>>> maintain.
>>>
>
> I've added new structures DTConstraint and RTConstraint so "* 2" is
> not needed anymore.
>
>
>>> 287 inline bool my_record_equals_compact_hashtable_entry
>>>
>>> How about renaming the above to klass_equals?
>
> I moved this function into RunTimeSharedClassInfo::EQUALS and added
> comments.
>
>
>>>
>>>
>>> 878 ResourceHashtable<
>>> 879 Symbol*, bool,
>>> 880 primitive_hash<Symbol*>,
>>> 881 primitive_equals<Symbol*>,
>>> 882 6661, // prime number
>>> 883 ResourceObj::C_HEAP> _unregister_class_exists;
>>>
>>> Maybe rename _unregister_class_exists to
>>> _existing_unregister_classes or _loaded_unregister_class?
>>>
>
> I renamed to _loaded_unregistered_classes
>
>
>>> 942 void
>>> SystemDictionaryShared::set_shared_class_misc_info(InstanceKlass* k,
>>> ClassFileStream* cfs) {
>>>
>>> Please add an assert to make sure it's only called for classes
>>> loaded by the non-builtin loaders.
>>>
>
> Added
>
>
>>> 978 tty->print_cr("Preload Warning: Skipping %s from
>>> unsupported location",
>>> 979 k->name()->as_C_string());
>>> 987 tty->print_cr("Preload Warning: Skipping %s from signed JAR",
>>> 988 k->name()->as_C_string());
>>> 997 tty->print_cr("Skipping JFR event class %s",
>>> k->name()->as_C_string());
>>>
>>> We should consider using log_warning for above tty->print.
>>>
>
> Done. I added SystemDictionaryShared::warn_excluded which calls
> log_warning(cds).
>
>
> Thanks
>
> - Ioi
>
>
>>> Thanks,
>>>
>>> Jiangli
>>>
>>>
>>> On 11/8/18 10:04 PM, Ioi Lam wrote:
>>>> https://bugs.openjdk.java.net/browse/JDK-8213346
>>>> http://cr.openjdk.java.net/~iklam/jdk12/8213346-shared-dict-using-compact-hashtable.v01/
>>>>
>>>>
>>>> Please review a long overdue cleanup of how the classes are indexed
>>>> in the CDS
>>>> archive.
>>>>
>>>> [1] Use CompactHashtable which is more space efficient than
>>>> Dictionary.
>>>>
>>>> [2] Space saving:
>>>>
>>>> + For each shared class, we used to store a fixed-size record in
>>>> SharedDictionaryEntry. That information is now stored in a
>>>> variable-length structure (see RunTimeSharedClassInfo).
>>>>
>>>> + Verifier constraints are now stored using u4 instead of Symbol*.
>>>>
>>>> Total space saving is about 45KB for the default CDS archive.
>>>>
>>>> [4] We had scattered code that checked whether a class should be
>>>> archived
>>>> or not. E.g., checking for code signers, JFR, etc. Now this is
>>>> checked inside
>>>> a consolidated function
>>>> SystemDictionaryShared::should_be_excluded()
>>>>
>>>> [5] Now we have 2 separate hashtable to look up shared classes: one
>>>> for the
>>>> built-in classes and the other for unregistered classes. This
>>>> simplifies the
>>>> lookup logic and is also faster.
>>>>
>>>> [6] A lot of old code was deleted. There's a net change of about
>>>> -250 lines of C
>>>> code.
>>>>
>>>> TESTING:
>>>>
>>>> I am running hs-tiers 1/2/3/4
>>>>
>>>> Thanks
>>>> - Ioi
>>>
>>
More information about the hotspot-runtime-dev
mailing list