Skip to content

Commit 0761228

Browse files
committed
8288443: Simplify vmClasses::resolve_all()
Reviewed-by: ccheung, dholmes, coleenp
1 parent 9ff4034 commit 0761228

File tree

2 files changed

+32
-31
lines changed

2 files changed

+32
-31
lines changed

src/hotspot/share/classfile/vmClassMacros.hpp

+1-5
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,6 @@
105105
do_klass(Continuation_klass, jdk_internal_vm_Continuation ) \
106106
do_klass(StackChunk_klass, jdk_internal_vm_StackChunk ) \
107107
\
108-
/* NOTE: needed too early in bootstrapping process to have checks based on JDK version */ \
109-
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
110108
do_klass(reflect_MagicAccessorImpl_klass, reflect_MagicAccessorImpl ) \
111109
do_klass(reflect_MethodAccessorImpl_klass, reflect_MethodAccessorImpl ) \
112110
do_klass(reflect_ConstructorAccessorImpl_klass, reflect_ConstructorAccessorImpl ) \
@@ -116,7 +114,7 @@
116114
do_klass(reflect_CallerSensitive_klass, reflect_CallerSensitive ) \
117115
do_klass(reflect_NativeConstructorAccessorImpl_klass, reflect_NativeConstructorAccessorImpl ) \
118116
\
119-
/* support for dynamic typing; it's OK if these are NULL in earlier JDKs */ \
117+
/* support for dynamic typing */ \
120118
do_klass(DirectMethodHandle_klass, java_lang_invoke_DirectMethodHandle ) \
121119
do_klass(MethodHandle_klass, java_lang_invoke_MethodHandle ) \
122120
do_klass(VarHandle_klass, java_lang_invoke_VarHandle ) \
@@ -135,7 +133,6 @@
135133
do_klass(ConstantCallSite_klass, java_lang_invoke_ConstantCallSite ) \
136134
do_klass(MutableCallSite_klass, java_lang_invoke_MutableCallSite ) \
137135
do_klass(VolatileCallSite_klass, java_lang_invoke_VolatileCallSite ) \
138-
/* Note: MethodHandle must be first, and VolatileCallSite last in group */ \
139136
\
140137
do_klass(AssertionStatusDirectives_klass, java_lang_AssertionStatusDirectives ) \
141138
do_klass(StringBuffer_klass, java_lang_StringBuffer ) \
@@ -160,7 +157,6 @@
160157
\
161158
do_klass(StackTraceElement_klass, java_lang_StackTraceElement ) \
162159
\
163-
/* It's okay if this turns out to be NULL in non-1.4 JDKs. */ \
164160
do_klass(nio_Buffer_klass, java_nio_Buffer ) \
165161
\
166162
/* Stack Walking */ \

src/hotspot/share/classfile/vmClasses.cpp

+31-26
Original file line numberDiff line numberDiff line change
@@ -158,39 +158,44 @@ void vmClasses::resolve_all(TRAPS) {
158158
java_lang_Object::register_natives(CHECK);
159159

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

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

169-
// do a bunch more:
170-
resolve_through(VM_CLASS_ID(Reference_klass), scan, CHECK);
171-
172-
// The offsets for jlr.Reference must be computed before
173-
// InstanceRefKlass::update_nonstatic_oop_maps is called. That function uses
174-
// the offsets to remove the referent and discovered fields from the oop maps,
175-
// as they are treated in a special way by the GC. Removing these oops from the
176-
// oop maps must be done before the usual subclasses of jlr.Reference are loaded.
177-
java_lang_ref_Reference::compute_offsets();
178-
179-
// Preload ref klasses and set reference types
180-
vmClasses::Reference_klass()->set_reference_type(REF_OTHER);
181-
InstanceRefKlass::update_nonstatic_oop_maps(vmClasses::Reference_klass());
182-
183-
resolve_through(VM_CLASS_ID(PhantomReference_klass), scan, CHECK);
184-
vmClasses::SoftReference_klass()->set_reference_type(REF_SOFT);
185-
vmClasses::WeakReference_klass()->set_reference_type(REF_WEAK);
186-
vmClasses::FinalReference_klass()->set_reference_type(REF_FINAL);
187-
vmClasses::PhantomReference_klass()->set_reference_type(REF_PHANTOM);
188-
189-
// JSR 292 classes
190-
vmClassID jsr292_group_start = VM_CLASS_ID(MethodHandle_klass);
191-
vmClassID jsr292_group_end = VM_CLASS_ID(VolatileCallSite_klass);
192-
resolve_until(jsr292_group_start, scan, CHECK);
193-
resolve_through(jsr292_group_end, scan, CHECK);
169+
if (UseSharedSpaces) {
170+
// These should already have been initialized during CDS dump.
171+
assert(vmClasses::Reference_klass()->reference_type() == REF_OTHER, "sanity");
172+
assert(vmClasses::SoftReference_klass()->reference_type() == REF_SOFT, "sanity");
173+
assert(vmClasses::WeakReference_klass()->reference_type() == REF_WEAK, "sanity");
174+
assert(vmClasses::FinalReference_klass()->reference_type() == REF_FINAL, "sanity");
175+
assert(vmClasses::PhantomReference_klass()->reference_type() == REF_PHANTOM, "sanity");
176+
} else {
177+
// If CDS is not enabled, the references classes must be initialized in
178+
// this order before the rest of the vmClasses can be resolved.
179+
resolve_through(VM_CLASS_ID(Reference_klass), scan, CHECK);
180+
181+
// The offsets for jlr.Reference must be computed before
182+
// InstanceRefKlass::update_nonstatic_oop_maps is called. That function uses
183+
// the offsets to remove the referent and discovered fields from the oop maps,
184+
// as they are treated in a special way by the GC. Removing these oops from the
185+
// oop maps must be done before the usual subclasses of jlr.Reference are loaded.
186+
java_lang_ref_Reference::compute_offsets();
187+
188+
// Preload ref klasses and set reference types
189+
vmClasses::Reference_klass()->set_reference_type(REF_OTHER);
190+
InstanceRefKlass::update_nonstatic_oop_maps(vmClasses::Reference_klass());
191+
192+
resolve_through(VM_CLASS_ID(PhantomReference_klass), scan, CHECK);
193+
vmClasses::SoftReference_klass()->set_reference_type(REF_SOFT);
194+
vmClasses::WeakReference_klass()->set_reference_type(REF_WEAK);
195+
vmClasses::FinalReference_klass()->set_reference_type(REF_FINAL);
196+
vmClasses::PhantomReference_klass()->set_reference_type(REF_PHANTOM);
197+
}
198+
194199
resolve_until(vmClassID::LIMIT, scan, CHECK);
195200

196201
CollectedHeap::set_filler_object_klass(vmClasses::FillerObject_klass());

0 commit comments

Comments
 (0)