< prev index next >
src/hotspot/share/classfile/classLoaderData.cpp
Print this page
@@ -57,11 +57,10 @@
#include "classfile/systemDictionary.hpp"
#include "logging/log.hpp"
#include "logging/logStream.hpp"
#include "memory/allocation.inline.hpp"
#include "memory/metadataFactory.hpp"
-#include "memory/metaspaceShared.hpp"
#include "memory/iterator.hpp"
#include "memory/resourceArea.hpp"
#include "memory/universe.hpp"
#include "oops/access.inline.hpp"
#include "oops/array.hpp"
@@ -74,150 +73,10 @@
#include "runtime/safepoint.hpp"
#include "utilities/growableArray.hpp"
#include "utilities/macros.hpp"
#include "utilities/ostream.hpp"
-
-#if INCLUDE_CDS_JAVA_HEAP
-// Support for archiving full module graph in CDS
-
-class ArchivedClassLoaderData {
- Array<PackageEntry*>* _packages;
- Array<ModuleEntry*>* _modules;
-
-public:
- ArchivedClassLoaderData() : _packages(NULL), _modules(NULL) {}
-
- void allocate(ClassLoaderData* loader_data);
- void init_archived_entries(ClassLoaderData* loader_data);
- void init_archived_oops(ClassLoaderData* loader_data);
-
- void serialize(SerializeClosure* f) {
- f->do_ptr((void**)&_packages);
- f->do_ptr((void**)&_modules);
- }
-
- void load_archived_entries(ClassLoaderData* loader_data);
- void restore_archived_oops(ClassLoaderData* loader_data);
-};
-
-static ArchivedClassLoaderData _archived_boot_loader_data;
-static ArchivedClassLoaderData _archived_platform_loader_data;
-static ArchivedClassLoaderData _archived_system_loader_data;
-static ModuleEntry* _archived_javabase_moduleEntry = NULL;
-
-void ArchivedClassLoaderData::allocate(ClassLoaderData* loader_data) {
- assert(DumpSharedSpaces, "must be");
-
- // We can't create a hashtable at dump time because the hashcode dependes on the
- // address of the Symbols, which may be relocated at run time due to ASLR.
- if (loader_data) {
- _packages = loader_data->packages()->allocate_archived_entries();
- _modules = loader_data->modules() ->allocate_archived_entries();
- }
-}
-
-void ArchivedClassLoaderData::init_archived_entries(ClassLoaderData* loader_data) {
- assert(DumpSharedSpaces, "must be");
- if (loader_data) {
- loader_data->packages()->init_archived_entries(_packages);
- loader_data->modules() ->init_archived_entries(_modules);
- }
-}
-
-void ArchivedClassLoaderData::init_archived_oops(ClassLoaderData* loader_data) {
- assert(DumpSharedSpaces, "must be");
- if (loader_data) {
- loader_data->modules()->init_archived_oops(_modules);
- }
-}
-
-void ArchivedClassLoaderData::load_archived_entries(ClassLoaderData* loader_data) {
- assert(UseSharedSpaces, "must be");
- if (_modules) {
- loader_data->modules()->load_archived_entries(loader_data, _modules);
- loader_data->packages()->load_archived_entries(_packages);
- }
-}
-
-void ArchivedClassLoaderData::restore_archived_oops(ClassLoaderData* loader_data) {
- assert(UseSharedSpaces, "must be");
- if (_modules) {
- loader_data->modules()->restore_archived_oops(loader_data, _modules);
- }
-}
-
-// ------------------------------
-
-void ClassLoaderData::allocate_archived_tables() {
- assert(DumpSharedSpaces, "must be");
- if (MetaspaceShared::use_full_module_graph()) {
- _archived_boot_loader_data.allocate (_the_null_class_loader_data);
- _archived_platform_loader_data.allocate(class_loader_data_or_null(SystemDictionary::java_platform_loader()));
- _archived_system_loader_data.allocate (class_loader_data_or_null(SystemDictionary::java_system_loader()));
- }
-}
-
-void ClassLoaderData::init_archived_tables() {
- assert(DumpSharedSpaces, "must be");
- if (MetaspaceShared::use_full_module_graph()) {
- _archived_boot_loader_data.init_archived_entries (_the_null_class_loader_data);
- _archived_platform_loader_data.init_archived_entries(class_loader_data_or_null(SystemDictionary::java_platform_loader()));
- _archived_system_loader_data.init_archived_entries (class_loader_data_or_null(SystemDictionary::java_system_loader()));
- _archived_javabase_moduleEntry = ModuleEntry::get_archived_entry(ModuleEntryTable::javabase_moduleEntry());
- }
-}
-
-void ClassLoaderData::init_archived_oops() {
- assert(DumpSharedSpaces, "must be");
- if (MetaspaceShared::use_full_module_graph()) {
- _archived_boot_loader_data.init_archived_oops (_the_null_class_loader_data);
- _archived_platform_loader_data.init_archived_oops(class_loader_data_or_null(SystemDictionary::java_platform_loader()));
- _archived_system_loader_data.init_archived_oops (class_loader_data_or_null(SystemDictionary::java_system_loader()));
- }
-}
-
-void ClassLoaderData::serialize(class SerializeClosure* f) {
- _archived_boot_loader_data.serialize(f);
- _archived_platform_loader_data.serialize(f);
- _archived_system_loader_data.serialize(f);
- f->do_ptr((void**)&_archived_javabase_moduleEntry);
-
- if (f->reading() && MetaspaceShared::use_full_module_graph()) {
- // Must be done before ClassLoader::create_javabase()
- _archived_boot_loader_data.load_archived_entries(_the_null_class_loader_data);
- ModuleEntryTable::set_javabase_moduleEntry(_archived_javabase_moduleEntry);
- log_info(cds)("use_full_module_graph = true; java.base = " INTPTR_FORMAT,
- p2i(_archived_javabase_moduleEntry));
- }
-}
-
-void ClassLoaderData::restore_archived_oops_for_null_class_loader_data() {
- assert(UseSharedSpaces, "must be");
- if (MetaspaceShared::use_full_module_graph()) {
- _archived_boot_loader_data.restore_archived_oops(_the_null_class_loader_data);
- }
-}
-
-void ClassLoaderData::restore_java_platform_loader_from_archive() {
- assert(UseSharedSpaces, "must be");
- assert(MetaspaceShared::use_full_module_graph(), "must be");
- assert(class_loader() == SystemDictionary::java_platform_loader(), "must be");
- _archived_platform_loader_data.load_archived_entries(this);
- _archived_platform_loader_data.restore_archived_oops(this);
-}
-
-void ClassLoaderData::restore_java_system_loader_from_archive() {
- assert(UseSharedSpaces, "must be");
- assert(MetaspaceShared::use_full_module_graph(), "must be");
- assert(class_loader() == SystemDictionary::java_system_loader(), "must be");
- _archived_system_loader_data.load_archived_entries(this);
- _archived_system_loader_data.restore_archived_oops(this);
-}
-
-#endif // INCLUDE_JAVA_HEAP
-
ClassLoaderData * ClassLoaderData::_the_null_class_loader_data = NULL;
void ClassLoaderData::init_null_class_loader_data() {
assert(_the_null_class_loader_data == NULL, "cannot initialize twice");
assert(ClassLoaderDataGraph::_head == NULL, "cannot initialize twice");
< prev index next >