< prev index next >

src/hotspot/share/classfile/packageEntry.cpp

Print this page
@@ -27,10 +27,11 @@
  #include "cds/archiveBuilder.hpp"
  #include "cds/archiveUtils.hpp"
  #include "cds/cdsConfig.hpp"
  #include "classfile/classLoaderData.hpp"
  #include "classfile/moduleEntry.hpp"
+ #include "classfile/modules.hpp"
  #include "classfile/packageEntry.hpp"
  #include "classfile/vmSymbols.hpp"
  #include "logging/log.hpp"
  #include "logging/logStream.hpp"
  #include "memory/metadataFactory.hpp"

@@ -198,11 +199,17 @@
  }
  
  void PackageEntry::metaspace_pointers_do(MetaspaceClosure* it) {
    it->push(&_name);
    it->push(&_module);
-   it->push(&_qualified_exports);
+ 
+   ModuleEntry* module_entry = module();
+   if (!(module_entry->is_named() && Modules::is_dynamic_proxy_module(module_entry))) {
+     // This is a dynamically generated module. Its _qualified_exports will be
+     // restored at runtime in the Java code. See comments in ArchivedData::restore().
+     it->push(&_qualified_exports);
+   }
  }
  
  PackageEntryTable::PackageEntryTable() { }
  
  PackageEntryTable::~PackageEntryTable() {

@@ -229,10 +236,15 @@
  bool PackageEntry::should_be_archived() const {
    return module()->should_be_archived();
  }
  
  void PackageEntry::remove_unshareable_info() {
+   ModuleEntry* module_entry = ArchiveBuilder::current()->get_source_addr(module());
+   if (module_entry->is_named() && Modules::is_dynamic_proxy_module(module_entry)) {
+     // See comments in PackageEntry::metaspace_pointers_do()
+     _qualified_exports = nullptr;
+   }
    if (_qualified_exports != nullptr) {
      _qualified_exports->set_in_aot_cache();
    }
    _defined_by_cds_in_class_path = 0;
    JFR_ONLY(set_trace_id(0);) // re-init at runtime
< prev index next >