< prev index next >

src/hotspot/share/cds/archiveBuilder.cpp

Print this page

 554   if (CDSConfig::is_dumping_dynamic_archive() && AOTMetaspace::in_aot_cache(obj)) {
 555     // Don't dump existing shared metadata again.
 556     return point_to_it;
 557   } else if (ref->msotype() == MetaspaceObj::MethodDataType ||
 558              ref->msotype() == MetaspaceObj::MethodCountersType ||
 559              ref->msotype() == MetaspaceObj::KlassTrainingDataType ||
 560              ref->msotype() == MetaspaceObj::MethodTrainingDataType ||
 561              ref->msotype() == MetaspaceObj::CompileTrainingDataType) {
 562     return (TrainingData::need_data() || TrainingData::assembling_data()) ? make_a_copy : set_to_null;
 563   } else if (ref->msotype() == MetaspaceObj::AdapterHandlerEntryType) {
 564     return CDSConfig::is_dumping_adapters() ? make_a_copy : set_to_null;
 565   } else {
 566     if (ref->msotype() == MetaspaceObj::ClassType) {
 567       Klass* klass = (Klass*)ref->obj();
 568       assert(klass->is_klass(), "must be");
 569       if (RegeneratedClasses::has_been_regenerated(klass)) {
 570         klass = RegeneratedClasses::get_regenerated_object(klass);
 571       }
 572       if (is_excluded(klass)) {
 573         ResourceMark rm;
 574         log_debug(cds, dynamic)("Skipping class (excluded): %s", klass->external_name());





 575         return set_to_null;
 576       }
 577     }
 578 
 579     return make_a_copy;
 580   }
 581 }
 582 
 583 void ArchiveBuilder::start_dump_region(DumpRegion* next) {
 584   current_dump_region()->pack(next);
 585   _current_dump_region = next;
 586 }
 587 
 588 char* ArchiveBuilder::ro_strdup(const char* s) {
 589   char* archived_str = ro_region_alloc((int)strlen(s) + 1);
 590   strcpy(archived_str, s);
 591   return archived_str;
 592 }
 593 
 594 // The objects that have embedded pointers will sink

 833   }
 834 
 835   for (int i = 0; i < klasses()->length(); i++) {
 836     const char* type;
 837     const char* unlinked = "";
 838     const char* kind = "";
 839     const char* hidden = "";
 840     const char* old = "";
 841     const char* generated = "";
 842     const char* aotlinked_msg = "";
 843     const char* inited_msg = "";
 844     Klass* k = get_buffered_addr(klasses()->at(i));
 845     bool inited = false;
 846     k->remove_java_mirror();
 847 #ifdef _LP64
 848     if (UseCompactObjectHeaders) {
 849       Klass* requested_k = to_requested(k);
 850       address narrow_klass_base = _requested_static_archive_bottom; // runtime encoding base == runtime mapping start
 851       const int narrow_klass_shift = precomputed_narrow_klass_shift();
 852       narrowKlass nk = CompressedKlassPointers::encode_not_null_without_asserts(requested_k, narrow_klass_base, narrow_klass_shift);
 853       k->set_prototype_header(markWord::prototype().set_narrow_klass(nk));
 854     }
 855 #endif //_LP64
 856     if (k->is_objArray_klass()) {






 857       // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
 858       // on their array classes.
 859       num_obj_array_klasses ++;
 860       type = "array";
 861     } else if (k->is_typeArray_klass()) {
 862       num_type_array_klasses ++;
 863       type = "array";
 864       k->remove_unshareable_info();
 865     } else {
 866       assert(k->is_instance_klass(), " must be");
 867       InstanceKlass* ik = InstanceKlass::cast(k);
 868       InstanceKlass* src_ik = get_source_addr(ik);
 869       bool aotlinked = AOTClassLinker::is_candidate(src_ik);
 870       inited = ik->has_aot_initialized_mirror();
 871       ADD_COUNT(num_instance_klasses);
 872       if (ik->is_hidden()) {
 873         ADD_COUNT(num_hidden_klasses);
 874         hidden = " hidden";
 875         oop loader = k->class_loader();
 876         if (loader == nullptr) {
 877           type = "boot";
 878           ADD_COUNT(num_boot_klasses);
 879         } else if (loader == SystemDictionary::java_platform_loader()) {
 880           type = "plat";

 554   if (CDSConfig::is_dumping_dynamic_archive() && AOTMetaspace::in_aot_cache(obj)) {
 555     // Don't dump existing shared metadata again.
 556     return point_to_it;
 557   } else if (ref->msotype() == MetaspaceObj::MethodDataType ||
 558              ref->msotype() == MetaspaceObj::MethodCountersType ||
 559              ref->msotype() == MetaspaceObj::KlassTrainingDataType ||
 560              ref->msotype() == MetaspaceObj::MethodTrainingDataType ||
 561              ref->msotype() == MetaspaceObj::CompileTrainingDataType) {
 562     return (TrainingData::need_data() || TrainingData::assembling_data()) ? make_a_copy : set_to_null;
 563   } else if (ref->msotype() == MetaspaceObj::AdapterHandlerEntryType) {
 564     return CDSConfig::is_dumping_adapters() ? make_a_copy : set_to_null;
 565   } else {
 566     if (ref->msotype() == MetaspaceObj::ClassType) {
 567       Klass* klass = (Klass*)ref->obj();
 568       assert(klass->is_klass(), "must be");
 569       if (RegeneratedClasses::has_been_regenerated(klass)) {
 570         klass = RegeneratedClasses::get_regenerated_object(klass);
 571       }
 572       if (is_excluded(klass)) {
 573         ResourceMark rm;
 574         aot_log_trace(aot)("pointer set to null: class (excluded): %s", klass->external_name());
 575         return set_to_null;
 576       }
 577       if (klass->is_array_klass() && CDSConfig::is_dumping_dynamic_archive()) {
 578         ResourceMark rm;
 579         aot_log_trace(aot)("pointer set to null: array class not supported in dynamic region: %s", klass->external_name());
 580         return set_to_null;
 581       }
 582     }
 583 
 584     return make_a_copy;
 585   }
 586 }
 587 
 588 void ArchiveBuilder::start_dump_region(DumpRegion* next) {
 589   current_dump_region()->pack(next);
 590   _current_dump_region = next;
 591 }
 592 
 593 char* ArchiveBuilder::ro_strdup(const char* s) {
 594   char* archived_str = ro_region_alloc((int)strlen(s) + 1);
 595   strcpy(archived_str, s);
 596   return archived_str;
 597 }
 598 
 599 // The objects that have embedded pointers will sink

 838   }
 839 
 840   for (int i = 0; i < klasses()->length(); i++) {
 841     const char* type;
 842     const char* unlinked = "";
 843     const char* kind = "";
 844     const char* hidden = "";
 845     const char* old = "";
 846     const char* generated = "";
 847     const char* aotlinked_msg = "";
 848     const char* inited_msg = "";
 849     Klass* k = get_buffered_addr(klasses()->at(i));
 850     bool inited = false;
 851     k->remove_java_mirror();
 852 #ifdef _LP64
 853     if (UseCompactObjectHeaders) {
 854       Klass* requested_k = to_requested(k);
 855       address narrow_klass_base = _requested_static_archive_bottom; // runtime encoding base == runtime mapping start
 856       const int narrow_klass_shift = precomputed_narrow_klass_shift();
 857       narrowKlass nk = CompressedKlassPointers::encode_not_null_without_asserts(requested_k, narrow_klass_base, narrow_klass_shift);
 858       k->set_prototype_header_klass(nk);
 859     }
 860 #endif //_LP64
 861     if (k->is_flatArray_klass()) {
 862       num_obj_array_klasses ++;
 863       type = "flat array";
 864     } else if (k->is_refArray_klass()) {
 865         num_obj_array_klasses ++;
 866         type = "ref array";
 867     } else if (k->is_objArray_klass()) {
 868       // InstanceKlass and TypeArrayKlass will in turn call remove_unshareable_info
 869       // on their array classes.
 870       num_obj_array_klasses ++;
 871       type = "obj array";
 872     } else if (k->is_typeArray_klass()) {
 873       num_type_array_klasses ++;
 874       type = "array";
 875       k->remove_unshareable_info();
 876     } else {
 877       assert(k->is_instance_klass(), " must be");
 878       InstanceKlass* ik = InstanceKlass::cast(k);
 879       InstanceKlass* src_ik = get_source_addr(ik);
 880       bool aotlinked = AOTClassLinker::is_candidate(src_ik);
 881       inited = ik->has_aot_initialized_mirror();
 882       ADD_COUNT(num_instance_klasses);
 883       if (ik->is_hidden()) {
 884         ADD_COUNT(num_hidden_klasses);
 885         hidden = " hidden";
 886         oop loader = k->class_loader();
 887         if (loader == nullptr) {
 888           type = "boot";
 889           ADD_COUNT(num_boot_klasses);
 890         } else if (loader == SystemDictionary::java_platform_loader()) {
 891           type = "plat";
< prev index next >