@@ -158,39 +158,44 @@ void vmClasses::resolve_all(TRAPS) {
158
158
java_lang_Object::register_natives (CHECK);
159
159
160
160
// 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.
162
162
java_lang_String::compute_offsets ();
163
163
java_lang_Class::compute_offsets ();
164
164
165
165
// Fixup mirrors for classes loaded before java.lang.Class.
166
166
Universe::initialize_basic_type_mirrors (CHECK);
167
167
Universe::fixup_mirrors (CHECK);
168
168
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
+
194
199
resolve_until (vmClassID::LIMIT, scan, CHECK);
195
200
196
201
CollectedHeap::set_filler_object_klass (vmClasses::FillerObject_klass ());
0 commit comments