87 _stats_total.add(this_cld_stat); 88 _num_loaders ++; 89 _stats_by_spacetype[msp->space_type()].add(this_cld_stat); 90 _num_loaders_by_spacetype[msp->space_type()] ++; 91 92 // Count classes loaded by this CLD. 93 CountKlassClosure ckc; 94 cld->classes_do(&ckc); 95 // accumulate. 96 _num_classes += ckc._num_classes; 97 _num_classes_by_spacetype[msp->space_type()] += ckc._num_classes; 98 _num_classes_shared += ckc._num_classes_shared; 99 _num_classes_shared_by_spacetype[msp->space_type()] += ckc._num_classes_shared; 100 101 // Optionally, print 102 if (_do_print) { 103 104 _out->print(UINTX_FORMAT_W(4) ": ", _num_loaders); 105 106 // Print "CLD for [<loader name>,] instance of <loader class name>" 107 // or "CLD for <anonymous class>, loaded by [<loader name>,] instance of <loader class name>" 108 109 ResourceMark rm; 110 const char* name = NULL; 111 const char* class_name = NULL; 112 113 // Note: this should also work if unloading: 114 Klass* k = cld->class_loader_klass(); 115 if (k != NULL) { 116 class_name = k->external_name(); 117 Symbol* s = cld->name(); 118 if (s != NULL) { 119 name = s->as_C_string(); 120 } 121 } else { 122 name = "<bootstrap>"; 123 } 124 125 // Print 126 _out->print("CLD " PTR_FORMAT, p2i(cld)); 127 if (cld->is_unloading()) { 128 _out->print(" (unloading)"); 129 } 130 _out->print(":"); 131 if (cld->is_unsafe_anonymous()) { 132 _out->print(" <anonymous class>, loaded by"); 133 } 134 if (name != NULL) { 135 _out->print(" \"%s\"", name); 136 } 137 if (class_name != NULL) { 138 _out->print(" instance of %s", class_name); 139 } 140 141 if (_do_print_classes) { 142 // Print a detailed description of all loaded classes. 143 streamIndentor sti(_out, 6); 144 _out->cr_indent(); 145 _out->print("Loaded classes"); 146 if (ckc._num_classes_shared > 0) { 147 _out->print("('s' = shared)"); 148 } 149 _out->print(":"); 150 PrintMetaspaceInfoKlassClosure pkic(_out, true); 151 cld->classes_do(&pkic); 152 _out->cr_indent(); | 87 _stats_total.add(this_cld_stat); 88 _num_loaders ++; 89 _stats_by_spacetype[msp->space_type()].add(this_cld_stat); 90 _num_loaders_by_spacetype[msp->space_type()] ++; 91 92 // Count classes loaded by this CLD. 93 CountKlassClosure ckc; 94 cld->classes_do(&ckc); 95 // accumulate. 96 _num_classes += ckc._num_classes; 97 _num_classes_by_spacetype[msp->space_type()] += ckc._num_classes; 98 _num_classes_shared += ckc._num_classes_shared; 99 _num_classes_shared_by_spacetype[msp->space_type()] += ckc._num_classes_shared; 100 101 // Optionally, print 102 if (_do_print) { 103 104 _out->print(UINTX_FORMAT_W(4) ": ", _num_loaders); 105 106 // Print "CLD for [<loader name>,] instance of <loader class name>" 107 // or "CLD for <weak hidden class>, loaded by [<loader name>,] instance of <loader class name>" 108 109 ResourceMark rm; 110 const char* name = NULL; 111 const char* class_name = NULL; 112 113 // Note: this should also work if unloading: 114 Klass* k = cld->class_loader_klass(); 115 if (k != NULL) { 116 class_name = k->external_name(); 117 Symbol* s = cld->name(); 118 if (s != NULL) { 119 name = s->as_C_string(); 120 } 121 } else { 122 name = "<bootstrap>"; 123 } 124 125 // Print 126 _out->print("CLD " PTR_FORMAT, p2i(cld)); 127 if (cld->is_unloading()) { 128 _out->print(" (unloading)"); 129 } 130 _out->print(":"); 131 if (cld->is_shortlived()) { 132 _out->print(" <weak hidden class>, loaded by"); 133 } 134 if (name != NULL) { 135 _out->print(" \"%s\"", name); 136 } 137 if (class_name != NULL) { 138 _out->print(" instance of %s", class_name); 139 } 140 141 if (_do_print_classes) { 142 // Print a detailed description of all loaded classes. 143 streamIndentor sti(_out, 6); 144 _out->cr_indent(); 145 _out->print("Loaded classes"); 146 if (ckc._num_classes_shared > 0) { 147 _out->print("('s' = shared)"); 148 } 149 _out->print(":"); 150 PrintMetaspaceInfoKlassClosure pkic(_out, true); 151 cld->classes_do(&pkic); 152 _out->cr_indent(); |