< prev index next >
src/hotspot/share/classfile/moduleEntry.hpp
Print this page
*** 45,54 ****
--- 45,55 ----
#define JAVAPKG "java"
#define JAVAPKG_LEN 4
#define JAVA_BASE_NAME "java.base"
#define JAVA_BASE_NAME_LEN 9
+ template <class T> class Array;
class ModuleClosure;
// A ModuleEntry describes a module that has been defined by a call to JVM_DefineModule.
// It contains:
// - Symbol* containing the module's name.
*** 61,71 ****
// The Mutex Module_lock is shared between ModuleEntry and PackageEntry, to lock either
// data structure.
class ModuleEntry : public HashtableEntry<Symbol*, mtModule> {
private:
OopHandle _module; // java.lang.Module
! OopHandle _pd; // java.security.ProtectionDomain, cached
// for shared classes from this module
ClassLoaderData* _loader_data;
GrowableArray<ModuleEntry*>* _reads; // list of modules that are readable by this module
Symbol* _version; // module version number
Symbol* _location; // module location
--- 62,72 ----
// The Mutex Module_lock is shared between ModuleEntry and PackageEntry, to lock either
// data structure.
class ModuleEntry : public HashtableEntry<Symbol*, mtModule> {
private:
OopHandle _module; // java.lang.Module
! OopHandle _shared_pd; // java.security.ProtectionDomain, cached
// for shared classes from this module
ClassLoaderData* _loader_data;
GrowableArray<ModuleEntry*>* _reads; // list of modules that are readable by this module
Symbol* _version; // module version number
Symbol* _location; // module location
*** 73,89 ****
bool _can_read_all_unnamed;
bool _has_default_read_edges; // JVMTI redefine/retransform support
bool _must_walk_reads; // walk module's reads list at GC safepoints to purge out dead modules
bool _is_open; // whether the packages in the module are all unqualifiedly exported
bool _is_patched; // whether the module is patched via --patch-module
JFR_ONLY(DEFINE_TRACE_ID_FIELD;)
enum {MODULE_READS_SIZE = 101}; // Initial size of list of modules that the module can read.
public:
void init() {
_module = OopHandle();
! _pd = OopHandle();
_loader_data = NULL;
_reads = NULL;
_version = NULL;
_location = NULL;
_can_read_all_unnamed = false;
--- 74,92 ----
bool _can_read_all_unnamed;
bool _has_default_read_edges; // JVMTI redefine/retransform support
bool _must_walk_reads; // walk module's reads list at GC safepoints to purge out dead modules
bool _is_open; // whether the packages in the module are all unqualifiedly exported
bool _is_patched; // whether the module is patched via --patch-module
+ CDS_JAVA_HEAP_ONLY(narrowOop _archived_module_narrow_oop;)
+
JFR_ONLY(DEFINE_TRACE_ID_FIELD;)
enum {MODULE_READS_SIZE = 101}; // Initial size of list of modules that the module can read.
public:
void init() {
_module = OopHandle();
! _shared_pd = OopHandle();
_loader_data = NULL;
_reads = NULL;
_version = NULL;
_location = NULL;
_can_read_all_unnamed = false;
*** 186,195 ****
--- 189,209 ----
void verify();
CDS_ONLY(int shared_path_index() { return _shared_path_index;})
JFR_ONLY(DEFINE_TRACE_ID_METHODS;)
+
+ #if INCLUDE_CDS_JAVA_HEAP
+ ModuleEntry* allocate_archived_entry() const;
+ void init_as_archived_entry();
+ void init_archived_oops();
+ static ModuleEntry* get_archived_entry(ModuleEntry* orig_entry);
+ static Array<ModuleEntry*>* write_archived_entry_array(GrowableArray<ModuleEntry*>* array);
+ static GrowableArray<ModuleEntry*>* read_archived_entry_array(Array<ModuleEntry*>* archived_array);
+ void load_from_archive(ClassLoaderData* loader_data);
+ void restore_archive_oops(ClassLoaderData* loader_data);
+ #endif
};
// Iterator interface
class ModuleClosure: public StackObj {
public:
*** 268,275 ****
--- 282,299 ----
static void finalize_javabase(Handle module_handle, Symbol* version, Symbol* location);
static void patch_javabase_entries(Handle module_handle);
void print(outputStream* st = tty);
void verify();
+
+ #if INCLUDE_CDS_JAVA_HEAP
+ Array<ModuleEntry*>* allocate_archived_entries();
+ void init_archived_entries(Array<ModuleEntry*>* archived_modules);
+ void init_archived_oops(Array<ModuleEntry*>* archived_modules);
+ void load_archived_entries(ClassLoaderData* loader_data,
+ Array<ModuleEntry*>* archived_modules);
+ void restore_archived_oops(ClassLoaderData* loader_data,
+ Array<ModuleEntry*>* archived_modules);
+ #endif
};
#endif // SHARE_CLASSFILE_MODULEENTRY_HPP
< prev index next >