< prev index next >
src/hotspot/share/classfile/javaClasses.cpp
Print this page
rev 50951 : 8202035: Archive the set of ModuleDescriptor and ModuleReference objects for observable system modules with unnamed initial module.
Summary: Support system module archiving with unnamed initial module at dump time.
Reviewed-by: erikj, coleenp, mchung, iklam, ccheung
Contributed-by: alan.bateman@oracle.com, jiangli.zhou@oracle.com
@@ -1049,11 +1049,12 @@
Klass *k = m->klass();
Handle archived_mirror_h(THREAD, archived_m);
ResetMirrorField reset(archived_mirror_h);
InstanceKlass::cast(k)->do_nonstatic_fields(&reset);
- log_trace(cds, mirror)("Archived %s mirror object from " PTR_FORMAT " ==> " PTR_FORMAT,
+ log_trace(cds, heap, mirror)(
+ "Archived %s mirror object from " PTR_FORMAT " ==> " PTR_FORMAT,
type2name((BasicType)t), p2i(Universe::_mirrors[t]), p2i(archived_m));
Universe::_mirrors[t] = archived_m;
}
}
@@ -1131,11 +1132,12 @@
k->set_archived_java_mirror_raw(archived_mirror);
k->set_has_raw_archived_mirror();
ResourceMark rm;
- log_trace(cds, mirror)("Archived %s mirror object from " PTR_FORMAT " ==> " PTR_FORMAT,
+ log_trace(cds, heap, mirror)(
+ "Archived %s mirror object from " PTR_FORMAT " ==> " PTR_FORMAT,
k->external_name(), p2i(mirror), p2i(archived_mirror));
return archived_mirror;
}
@@ -1184,20 +1186,22 @@
// The archived mirror's field at _klass_offset is still pointing to the original
// klass. Updated the field in the archived mirror to point to the relocated
// klass in the archive.
Klass *reloc_k = MetaspaceShared::get_relocated_klass(as_Klass(mirror));
- log_debug(cds, mirror)("Relocate mirror metadata field at _klass_offset from " PTR_FORMAT " ==> " PTR_FORMAT,
+ log_debug(cds, heap, mirror)(
+ "Relocate mirror metadata field at _klass_offset from " PTR_FORMAT " ==> " PTR_FORMAT,
p2i(as_Klass(mirror)), p2i(reloc_k));
archived_mirror->metadata_field_put(_klass_offset, reloc_k);
// The field at _array_klass_offset is pointing to the original one dimension
// higher array klass if exists. Relocate the pointer.
Klass *arr = array_klass_acquire(mirror);
if (arr != NULL) {
Klass *reloc_arr = MetaspaceShared::get_relocated_klass(arr);
- log_debug(cds, mirror)("Relocate mirror metadata field at _array_klass_offset from " PTR_FORMAT " ==> " PTR_FORMAT,
+ log_debug(cds, heap, mirror)(
+ "Relocate mirror metadata field at _array_klass_offset from " PTR_FORMAT " ==> " PTR_FORMAT,
p2i(arr), p2i(reloc_arr));
archived_mirror->metadata_field_put(_array_klass_offset, reloc_arr);
}
return archived_mirror;
}
@@ -1245,11 +1249,12 @@
k->clear_has_raw_archived_mirror();
set_mirror_module_field(k, mirror, module, THREAD);
ResourceMark rm;
- log_trace(cds, mirror)("Restored %s archived mirror " PTR_FORMAT, k->external_name(), p2i(mirror()));
+ log_trace(cds, heap, mirror)(
+ "Restored %s archived mirror " PTR_FORMAT, k->external_name(), p2i(mirror()));
return true;
}
#endif // INCLUDE_CDS_JAVA_HEAP
@@ -4271,10 +4276,13 @@
int java_lang_AssertionStatusDirectives::deflt_offset;
int java_nio_Buffer::_limit_offset;
int java_util_concurrent_locks_AbstractOwnableSynchronizer::_owner_offset;
int reflect_ConstantPool::_oop_offset;
int reflect_UnsafeStaticFieldAccessorImpl::_base_offset;
+int jdk_internal_module_ArchivedModuleGraph::_archivedSystemModules_offset;
+int jdk_internal_module_ArchivedModuleGraph::_archivedModuleFinder_offset;
+int jdk_internal_module_ArchivedModuleGraph::_archivedMainModule_offset;
#define STACKTRACEELEMENT_FIELDS_DO(macro) \
macro(declaringClassObject_offset, k, "declaringClassObject", class_signature, false); \
macro(classLoaderName_offset, k, "classLoaderName", string_signature, false); \
macro(moduleName_offset, k, "moduleName", string_signature, false); \
@@ -4433,10 +4441,27 @@
static int member_offset(int hardcoded_offset) {
return (hardcoded_offset * heapOopSize) + instanceOopDesc::base_offset_in_bytes();
}
+#define MODULEBOOTSTRAP_FIELDS_DO(macro) \
+ macro(_archivedSystemModules_offset, k, "archivedSystemModules", systemModules_signature, true); \
+ macro(_archivedModuleFinder_offset, k, "archivedModuleFinder", moduleFinder_signature, true); \
+ macro(_archivedMainModule_offset, k, "archivedMainModule", string_signature, true)
+
+void jdk_internal_module_ArchivedModuleGraph::compute_offsets() {
+ InstanceKlass* k = SystemDictionary::ArchivedModuleGraph_klass();
+ assert(k != NULL, "must be loaded");
+ MODULEBOOTSTRAP_FIELDS_DO(FIELD_COMPUTE_OFFSET);
+}
+
+#if INCLUDE_CDS
+void jdk_internal_module_ArchivedModuleGraph::serialize(SerializeClosure* f) {
+ MODULEBOOTSTRAP_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
+}
+#endif
+
// Compute hard-coded offsets
// Invoked before SystemDictionary::initialize, so pre-loaded classes
// are not available to determine the offset_of_static_fields.
void JavaClasses::compute_hard_coded_offsets() {
@@ -4491,10 +4516,12 @@
java_lang_StackTraceElement::compute_offsets();
java_lang_StackFrameInfo::compute_offsets();
java_lang_LiveStackFrameInfo::compute_offsets();
java_util_concurrent_locks_AbstractOwnableSynchronizer::compute_offsets();
+ jdk_internal_module_ArchivedModuleGraph::compute_offsets();
+
// generated interpreter code wants to know about the offsets we just computed:
AbstractAssembler::update_delayed_values();
}
#ifndef PRODUCT
< prev index next >