Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
8288443: Simplify vmClasses::resolve_all()
Reviewed-by: ccheung, dholmes, coleenp
  • Loading branch information
iklam committed Jun 15, 2022
1 parent 9ff4034 commit 0761228
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 31 deletions.
6 changes: 1 addition & 5 deletions src/hotspot/share/classfile/vmClassMacros.hpp
Expand Up @@ -105,8 +105,6 @@
do_klass(Continuation_klass, jdk_internal_vm_Continuation ) \
do_klass(StackChunk_klass, jdk_internal_vm_StackChunk ) \
\
/* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
do_klass(reflect_MagicAccessorImpl_klass, reflect_MagicAccessorImpl ) \
do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl ) \
do_klass(reflect_ConstructorAccessorImpl_klass, reflect_ConstructorAccessorImpl ) \
Expand All @@ -116,7 +114,7 @@
do_klass(reflect_CallerSensitive_klass, reflect_CallerSensitive ) \
do_klass(reflect_NativeConstructorAccessorImpl_klass, reflect_NativeConstructorAccessorImpl ) \
\
/* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
/* support for dynamic typing */ \
do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle ) \
do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle ) \
do_klass(VarHandle_klass, java_lang_invoke_VarHandle ) \
Expand All @@ -135,7 +133,6 @@
do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite ) \
do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite ) \
do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite ) \
/* Note: MethodHandle must be first, and VolatileCallSite last in group */ \
\
do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives ) \
do_klass(StringBuffer_klass, java_lang_StringBuffer ) \
Expand All @@ -160,7 +157,6 @@
\
do_klass(StackTraceElement_klass, java_lang_StackTraceElement ) \
\
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
do_klass(nio_Buffer_klass, java_nio_Buffer ) \
\
/* Stack Walking */ \
Expand Down
57 changes: 31 additions & 26 deletions src/hotspot/share/classfile/vmClasses.cpp
Expand Up @@ -158,39 +158,44 @@ void vmClasses::resolve_all(TRAPS) {
java_lang_Object::register_natives(CHECK);

// Calculate offsets for String and Class classes since they are loaded and
// can be used after this point.
// can be used after this point. These are no-op when CDS is enabled.
java_lang_String::compute_offsets();
java_lang_Class::compute_offsets();

// Fixup mirrors for classes loaded before java.lang.Class.
Universe::initialize_basic_type_mirrors(CHECK);
Universe::fixup_mirrors(CHECK);

// do a bunch more:
resolve_through(VM_CLASS_ID(Reference_klass), scan, CHECK);

// The offsets for jlr.Reference must be computed before
// InstanceRefKlass::update_nonstatic_oop_maps is called. That function uses
// the offsets to remove the referent and discovered fields from the oop maps,
// as they are treated in a special way by the GC. Removing these oops from the
// oop maps must be done before the usual subclasses of jlr.Reference are loaded.
java_lang_ref_Reference::compute_offsets();

// Preload ref klasses and set reference types
vmClasses::Reference_klass()->set_reference_type(REF_OTHER);
InstanceRefKlass::update_nonstatic_oop_maps(vmClasses::Reference_klass());

resolve_through(VM_CLASS_ID(PhantomReference_klass), scan, CHECK);
vmClasses::SoftReference_klass()->set_reference_type(REF_SOFT);
vmClasses::WeakReference_klass()->set_reference_type(REF_WEAK);
vmClasses::FinalReference_klass()->set_reference_type(REF_FINAL);
vmClasses::PhantomReference_klass()->set_reference_type(REF_PHANTOM);

// JSR 292 classes
vmClassID jsr292_group_start = VM_CLASS_ID(MethodHandle_klass);
vmClassID jsr292_group_end = VM_CLASS_ID(VolatileCallSite_klass);
resolve_until(jsr292_group_start, scan, CHECK);
resolve_through(jsr292_group_end, scan, CHECK);
if (UseSharedSpaces) {
// These should already have been initialized during CDS dump.
assert(vmClasses::Reference_klass()->reference_type() == REF_OTHER, "sanity");
assert(vmClasses::SoftReference_klass()->reference_type() == REF_SOFT, "sanity");
assert(vmClasses::WeakReference_klass()->reference_type() == REF_WEAK, "sanity");
assert(vmClasses::FinalReference_klass()->reference_type() == REF_FINAL, "sanity");
assert(vmClasses::PhantomReference_klass()->reference_type() == REF_PHANTOM, "sanity");
} else {
// If CDS is not enabled, the references classes must be initialized in
// this order before the rest of the vmClasses can be resolved.
resolve_through(VM_CLASS_ID(Reference_klass), scan, CHECK);

// The offsets for jlr.Reference must be computed before
// InstanceRefKlass::update_nonstatic_oop_maps is called. That function uses
// the offsets to remove the referent and discovered fields from the oop maps,
// as they are treated in a special way by the GC. Removing these oops from the
// oop maps must be done before the usual subclasses of jlr.Reference are loaded.
java_lang_ref_Reference::compute_offsets();

// Preload ref klasses and set reference types
vmClasses::Reference_klass()->set_reference_type(REF_OTHER);
InstanceRefKlass::update_nonstatic_oop_maps(vmClasses::Reference_klass());

resolve_through(VM_CLASS_ID(PhantomReference_klass), scan, CHECK);
vmClasses::SoftReference_klass()->set_reference_type(REF_SOFT);
vmClasses::WeakReference_klass()->set_reference_type(REF_WEAK);
vmClasses::FinalReference_klass()->set_reference_type(REF_FINAL);
vmClasses::PhantomReference_klass()->set_reference_type(REF_PHANTOM);
}

resolve_until(vmClassID::LIMIT, scan, CHECK);

CollectedHeap::set_filler_object_klass(vmClasses::FillerObject_klass());
Expand Down

0 comments on commit 0761228

Please sign in to comment.