RFR (M) 8213346 Re-implement shared dictionary

Jiangli Zhou jiangli.zhou at oracle.com
Fri Nov 9 20:22:34 UTC 2018


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.

  287 inline bool my_record_equals_compact_hashtable_entry

How about renaming the above to klass_equals?

  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?

  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.

  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.

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