Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8335583

Avoid using pointers in CDS tables

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Fixed
    • Icon: P4 P4
    • 24
    • None
    • hotspot
    • b24

      We should convert the following calls to store an 32-bit offset instead. That way, the CDS archive will be smaller, and it will start-up faster because fewer pointers need to be relocated with ASLR

       0 ArchivePtrMarker::mark_pointer
       1 ArchiveBuilder::write_pointer_in_buffer
       2 ArchiveBuilder::write_pointer_in_buffer
       3 RunTimeClassInfo::init
       4 CopySharedClassInfoToArchive::do_entry
       5 DumpTimeSharedClassTable::iterate_all_live_classes
      [...]
      12 SystemDictionaryShared::write_dictionary
      13 SystemDictionaryShared::write_to_archive
      14 VM_PopulateDumpSharedSpace::dump_read_only_tables
      15 VM_PopulateDumpSharedSpace::doit
      16 VM_Operation::evaluate

       0 ArchivePtrMarker::mark_pointer
       1 ArchiveBuilder::write_pointer_in_buffer
       2 ArchiveBuilder::write_pointer_in_buffer
       3 LambdaProxyClassKey::init_for_archive
       4 RunTimeLambdaProxyClassInfo::init
       5 CopyLambdaProxyClassInfoToArchive::do_entry
      [...]
       9 SystemDictionaryShared::write_lambda_proxy_class_dictionary
      10 SystemDictionaryShared::write_to_archive
      11 VM_PopulateDumpSharedSpace::dump_read_only_tables
      12 VM_PopulateDumpSharedSpace::doit
      13 VM_Operation::evaluate

       0 ArchivePtrMarker::mark_pointer*>
       1 LambdaFormInvokers::dump_static_archive_invokers
       2 VM_PopulateDumpSharedSpace::dump_read_only_tables
       3 VM_PopulateDumpSharedSpace::doit
       4 VM_Operation::evaluate

       0 ArchivePtrMarker::mark_pointer
       1 Modules::dump_main_module_name
       2 VM_PopulateDumpSharedSpace::dump_read_only_tables
       3 VM_PopulateDumpSharedSpace::doit
       4 VM_Operation::evaluate

       0 ArchivePtrMarker::mark_pointer
       1 AdjustLambdaProxyClassInfo::do_entry
      [...]
       5 SystemDictionaryShared::adjust_lambda_proxy_class_dictionary
       6 VM_PopulateDumpSharedSpace::doit
       7 VM_Operation::evaluate

      ===========================================================================

      For example, in RunTimeClassInfo, we have

      class RunTimeClassInfo {
      ...
        InstanceKlass* _klass;

      }

      void RunTimeClassInfo::init(DumpTimeClassInfo& info) {
        ArchiveBuilder* builder = ArchiveBuilder::current();
        builder->write_pointer_in_buffer(&_klass, info._klass);

      The above should be changed to:

      class RunTimeClassInfo {
      ...
        u4 * _klass_offset;
        InstanceKlass* klass() { return (InstanceKlass*)(SharedBaseAddress + _klass_offset;}
      }

      void RunTimeClassInfo::init(DumpTimeClassInfo& info) {
        ArchiveBuilder* builder = ArchiveBuilder::curent();
        _klass_offset = builder->any_to_offset_u4(info._klass);

      (Note: we already have similar logic in runTimeClassInfo.cpp:

            vf_constraints[i]._name = builder->any_to_offset_u4(info._verifier_constraints->at(i).name());
            vf_constraints[i]._from_name = builder->any_to_offset_u4(info._verifier_constraints->at(i).from_name());

            matsaave Matias Saavedra Silva
            iklam Ioi Lam
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: