@@ -304,7 +304,9 @@ void HeapShared::copy_closed_archive_heap_objects(
304304
305305 archive_object_subgraphs (closed_archive_subgraph_entry_fields,
306306 num_closed_archive_subgraph_entry_fields,
307- true /* is_closed_archive */ , THREAD);
307+ true /* is_closed_archive */ ,
308+ false /* is_full_module_graph */ ,
309+ THREAD);
308310
309311 G1CollectedHeap::heap ()->end_archive_alloc_range (closed_archive,
310312 os::vm_allocation_granularity ());
@@ -324,11 +326,13 @@ void HeapShared::copy_open_archive_heap_objects(
324326 archive_object_subgraphs (open_archive_subgraph_entry_fields,
325327 num_open_archive_subgraph_entry_fields,
326328 false /* is_closed_archive */ ,
329+ false /* is_full_module_graph */ ,
327330 THREAD);
328331 if (MetaspaceShared::use_full_module_graph ()) {
329332 archive_object_subgraphs (fmg_open_archive_subgraph_entry_fields,
330333 num_fmg_open_archive_subgraph_entry_fields,
331334 false /* is_closed_archive */ ,
335+ true /* is_full_module_graph */ ,
332336 THREAD);
333337 }
334338
@@ -353,16 +357,18 @@ HeapShared::RunTimeKlassSubGraphInfoTable HeapShared::_run_time_subgraph_info_
353357KlassSubGraphInfo* HeapShared::init_subgraph_info (Klass* k, bool is_full_module_graph) {
354358 assert (DumpSharedSpaces, " dump time only" );
355359 bool created;
360+ Klass* relocated_k = MetaspaceShared::get_relocated_klass (k);
356361 KlassSubGraphInfo* info =
357- _dump_time_subgraph_info_table->put_if_absent (k , KlassSubGraphInfo (k , is_full_module_graph),
362+ _dump_time_subgraph_info_table->put_if_absent (relocated_k , KlassSubGraphInfo (relocated_k , is_full_module_graph),
358363 &created);
359364 assert (created, " must not initialize twice" );
360365 return info;
361366}
362367
363368KlassSubGraphInfo* HeapShared::get_subgraph_info (Klass* k) {
364369 assert (DumpSharedSpaces, " dump time only" );
365- KlassSubGraphInfo* info = _dump_time_subgraph_info_table->get (k);
370+ Klass* relocated_k = MetaspaceShared::get_relocated_klass (k);
371+ KlassSubGraphInfo* info = _dump_time_subgraph_info_table->get (relocated_k);
366372 assert (info != NULL , " must have been initialized" );
367373 return info;
368374}
@@ -440,7 +446,7 @@ void KlassSubGraphInfo::add_subgraph_object_klass(Klass* orig_k, Klass *relocate
440446
441447// Initialize an archived subgraph_info_record from the given KlassSubGraphInfo.
442448void ArchivedKlassSubGraphInfoRecord::init (KlassSubGraphInfo* info) {
443- _k = MetaspaceShared::get_relocated_klass ( info->klass () );
449+ _k = info->klass ();
444450 _entry_field_records = NULL ;
445451 _subgraph_object_klasses = NULL ;
446452 _is_full_module_graph = info->is_full_module_graph ();
@@ -491,7 +497,7 @@ struct CopyKlassSubGraphInfoToArchive : StackObj {
491497 (ArchivedKlassSubGraphInfoRecord*)MetaspaceShared::read_only_space_alloc (sizeof (ArchivedKlassSubGraphInfoRecord));
492498 record->init (&info);
493499
494- unsigned int hash = SystemDictionaryShared::hash_for_shared_dictionary (MetaspaceShared::get_relocated_klass ( klass) );
500+ unsigned int hash = SystemDictionaryShared::hash_for_shared_dictionary (klass);
495501 u4 delta = MetaspaceShared::object_delta_u4 (record);
496502 _writer->add (hash, delta);
497503 }
@@ -974,8 +980,9 @@ void HeapShared::set_has_been_seen_during_subgraph_recording(oop obj) {
974980 ++ _num_new_walked_objs;
975981}
976982
977- void HeapShared::start_recording_subgraph (InstanceKlass *k, const char * class_name) {
983+ void HeapShared::start_recording_subgraph (InstanceKlass *k, const char * class_name, bool is_full_module_graph ) {
978984 log_info (cds, heap)(" Start recording subgraph(s) for archived fields in %s" , class_name);
985+ init_subgraph_info (k, is_full_module_graph);
979986 init_seen_objects_table ();
980987 _num_new_walked_objs = 0 ;
981988 _num_new_archived_objs = 0 ;
@@ -1020,8 +1027,7 @@ class ArchivableStaticFieldFinder: public FieldClosure {
10201027};
10211028
10221029void HeapShared::init_subgraph_entry_fields (ArchivableStaticFieldInfo fields[],
1023- int num, bool is_full_module_graph,
1024- Thread* THREAD) {
1030+ int num, Thread* THREAD) {
10251031 for (int i = 0 ; i < num; i++) {
10261032 ArchivableStaticFieldInfo* info = &fields[i];
10271033 TempNewSymbol klass_name = SymbolTable::new_symbol (info->klass_name );
@@ -1041,7 +1047,6 @@ void HeapShared::init_subgraph_entry_fields(ArchivableStaticFieldInfo fields[],
10411047
10421048 info->klass = ik;
10431049 info->offset = finder.offset ();
1044- init_subgraph_info (ik, is_full_module_graph);
10451050 }
10461051}
10471052
@@ -1050,14 +1055,14 @@ void HeapShared::init_subgraph_entry_fields(Thread* THREAD) {
10501055
10511056 init_subgraph_entry_fields (closed_archive_subgraph_entry_fields,
10521057 num_closed_archive_subgraph_entry_fields,
1053- false , THREAD);
1058+ THREAD);
10541059 init_subgraph_entry_fields (open_archive_subgraph_entry_fields,
10551060 num_open_archive_subgraph_entry_fields,
1056- false , THREAD);
1061+ THREAD);
10571062 if (MetaspaceShared::use_full_module_graph ()) {
10581063 init_subgraph_entry_fields (fmg_open_archive_subgraph_entry_fields,
10591064 num_fmg_open_archive_subgraph_entry_fields,
1060- true , THREAD);
1065+ THREAD);
10611066 }
10621067}
10631068
@@ -1068,6 +1073,7 @@ void HeapShared::init_for_dumping(Thread* THREAD) {
10681073
10691074void HeapShared::archive_object_subgraphs (ArchivableStaticFieldInfo fields[],
10701075 int num, bool is_closed_archive,
1076+ bool is_full_module_graph,
10711077 Thread* THREAD) {
10721078 _num_total_subgraph_recordings = 0 ;
10731079 _num_total_walked_objs = 0 ;
@@ -1085,7 +1091,7 @@ void HeapShared::archive_object_subgraphs(ArchivableStaticFieldInfo fields[],
10851091 for (i = 0 ; i < num; ) {
10861092 ArchivableStaticFieldInfo* info = &fields[i];
10871093 const char * klass_name = info->klass_name ;
1088- start_recording_subgraph (info->klass , klass_name);
1094+ start_recording_subgraph (info->klass , klass_name, is_full_module_graph );
10891095
10901096 // If you have specified consecutive fields of the same klass in
10911097 // fields[], these will be archived in the same
@@ -1099,8 +1105,7 @@ void HeapShared::archive_object_subgraphs(ArchivableStaticFieldInfo fields[],
10991105
11001106 archive_reachable_objects_from_static_field (f->klass , f->klass_name ,
11011107 f->offset , f->field_name ,
1102- is_closed_archive,
1103- CHECK);
1108+ is_closed_archive, CHECK);
11041109 }
11051110 done_recording_subgraph (info->klass , klass_name);
11061111 }
0 commit comments