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 or 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->has_class_mirror_holder()) {
132 _out->print(" <weak hidden or 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 <hidden or 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->has_class_mirror_holder()) {
132 _out->print(" <hidden or 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();
|