@@ -209,8 +209,14 @@ static bool is_subgraph_root_class_of(ArchivableStaticFieldInfo fields[], Instan
209209}
210210
211211bool HeapShared::is_subgraph_root_class (InstanceKlass* ik) {
212- return is_subgraph_root_class_of (archive_subgraph_entry_fields, ik) ||
213- is_subgraph_root_class_of (fmg_archive_subgraph_entry_fields, ik);
212+ assert (CDSConfig::is_dumping_heap (), " dump-time only" );
213+ if (!CDSConfig::is_dumping_aot_linked_classes ()) {
214+ // Legacy CDS archive support (to be deprecated)
215+ return is_subgraph_root_class_of (archive_subgraph_entry_fields, ik) ||
216+ is_subgraph_root_class_of (fmg_archive_subgraph_entry_fields, ik);
217+ } else {
218+ return false ;
219+ }
214220}
215221
216222oop HeapShared::CachedOopInfo::orig_referrer () const {
@@ -934,12 +940,16 @@ void HeapShared::scan_java_class(Klass* orig_k) {
934940void HeapShared::archive_subgraphs () {
935941 assert (CDSConfig::is_dumping_heap (), " must be" );
936942
937- archive_object_subgraphs (archive_subgraph_entry_fields,
938- false /* is_full_module_graph */ );
943+ if (!CDSConfig::is_dumping_aot_linked_classes ()) {
944+ archive_object_subgraphs (archive_subgraph_entry_fields,
945+ false /* is_full_module_graph */ );
946+ if (CDSConfig::is_dumping_full_module_graph ()) {
947+ archive_object_subgraphs (fmg_archive_subgraph_entry_fields,
948+ true /* is_full_module_graph */ );
949+ }
950+ }
939951
940952 if (CDSConfig::is_dumping_full_module_graph ()) {
941- archive_object_subgraphs (fmg_archive_subgraph_entry_fields,
942- true /* is_full_module_graph */ );
943953 Modules::verify_archived_modules ();
944954 }
945955}
@@ -1295,8 +1305,10 @@ void HeapShared::resolve_classes(JavaThread* current) {
12951305 if (!is_archived_heap_in_use ()) {
12961306 return ; // nothing to do
12971307 }
1298- resolve_classes_for_subgraphs (current, archive_subgraph_entry_fields);
1299- resolve_classes_for_subgraphs (current, fmg_archive_subgraph_entry_fields);
1308+ if (!CDSConfig::is_using_aot_linked_classes ()) {
1309+ resolve_classes_for_subgraphs (current, archive_subgraph_entry_fields);
1310+ resolve_classes_for_subgraphs (current, fmg_archive_subgraph_entry_fields);
1311+ }
13001312}
13011313
13021314void HeapShared::resolve_classes_for_subgraphs (JavaThread* current, ArchivableStaticFieldInfo fields[]) {
@@ -1734,13 +1746,13 @@ bool HeapShared::walk_one_object(PendingOopStack* stack, int level, KlassSubGrap
17341746 }
17351747 }
17361748
1737- if (CDSConfig::is_initing_classes_at_dump_time ()) {
1749+ if (CDSConfig::is_dumping_aot_linked_classes ()) {
17381750 if (java_lang_Class::is_instance (orig_obj)) {
17391751 orig_obj = scratch_java_mirror (orig_obj);
17401752 assert (orig_obj != nullptr , " must be archived" );
17411753 }
17421754 } else if (java_lang_Class::is_instance (orig_obj) && subgraph_info != _dump_time_special_subgraph) {
1743- // Without CDSConfig::is_initing_classes_at_dump_time (), we only allow archived objects to
1755+ // Without CDSConfig::is_dumping_aot_linked_classes (), we only allow archived objects to
17441756 // point to the mirrors of (1) j.l.Object, (2) primitive classes, and (3) box classes. These are initialized
17451757 // very early by HeapShared::init_box_classes().
17461758 if (orig_obj == vmClasses::Object_klass ()->java_mirror ()
@@ -1808,9 +1820,9 @@ bool HeapShared::walk_one_object(PendingOopStack* stack, int level, KlassSubGrap
18081820 orig_obj->oop_iterate (&pusher);
18091821 }
18101822
1811- if (CDSConfig::is_initing_classes_at_dump_time ()) {
1812- // The classes of all archived enum instances have been marked as aot-init,
1813- // so there's nothing else to be done in the production run .
1823+ if (CDSConfig::is_dumping_aot_linked_classes ()) {
1824+ // The enum klasses are archived with aot-initialized mirror.
1825+ // See AOTClassInitializer::can_archive_initialized_mirror() .
18141826 } else {
18151827 // This is legacy support for enum classes before JEP 483 -- we cannot rerun
18161828 // the enum's <clinit> in the production run, so special handling is needed.
@@ -1949,7 +1961,7 @@ void HeapShared::verify_reachable_objects_from(oop obj) {
19491961#endif
19501962
19511963void HeapShared::check_special_subgraph_classes () {
1952- if (CDSConfig::is_initing_classes_at_dump_time ()) {
1964+ if (CDSConfig::is_dumping_aot_linked_classes ()) {
19531965 // We can have aot-initialized classes (such as Enums) that can reference objects
19541966 // of arbitrary types. Currently, we trust the JEP 483 implementation to only
19551967 // aot-initialize classes that are "safe".
@@ -2136,9 +2148,11 @@ void HeapShared::init_subgraph_entry_fields(ArchivableStaticFieldInfo fields[],
21362148void HeapShared::init_subgraph_entry_fields (TRAPS) {
21372149 assert (CDSConfig::is_dumping_heap (), " must be" );
21382150 _dump_time_subgraph_info_table = new (mtClass)DumpTimeKlassSubGraphInfoTable ();
2139- init_subgraph_entry_fields (archive_subgraph_entry_fields, CHECK);
2140- if (CDSConfig::is_dumping_full_module_graph ()) {
2141- init_subgraph_entry_fields (fmg_archive_subgraph_entry_fields, CHECK);
2151+ if (!CDSConfig::is_dumping_aot_linked_classes ()) {
2152+ init_subgraph_entry_fields (archive_subgraph_entry_fields, CHECK);
2153+ if (CDSConfig::is_dumping_full_module_graph ()) {
2154+ init_subgraph_entry_fields (fmg_archive_subgraph_entry_fields, CHECK);
2155+ }
21422156 }
21432157}
21442158
0 commit comments