comparison src/share/vm/classfile/classLoaderData.cpp @ 14422:2b8e28fdf503

Merge
author kvn
date Tue, 05 Nov 2013 17:38:04 -0800
parents e64f1fe9756b
children 86e6d691f2e1
comparison
equal deleted inserted replaced
14421:3068270ba476 14422:2b8e28fdf503
129 for (Klass* k = _klasses; k != NULL; k = k->next_link()) { 129 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
130 f(k); 130 f(k);
131 } 131 }
132 } 132 }
133 133
134 void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
135 // Lock to avoid classes being modified/added/removed during iteration
136 MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag);
137 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
138 // Do not filter ArrayKlass oops here...
139 if (k->oop_is_array() || (k->oop_is_instance() && InstanceKlass::cast(k)->is_loaded())) {
140 klass_closure->do_klass(k);
141 }
142 }
143 }
144
134 void ClassLoaderData::classes_do(void f(InstanceKlass*)) { 145 void ClassLoaderData::classes_do(void f(InstanceKlass*)) {
135 for (Klass* k = _klasses; k != NULL; k = k->next_link()) { 146 for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
136 if (k->oop_is_instance()) { 147 if (k->oop_is_instance()) {
137 f(InstanceKlass::cast(k)); 148 f(InstanceKlass::cast(k));
138 } 149 }
259 tty->print_cr("[TraceClassLoaderData] Adding k: " PTR_FORMAT " %s to CLD: " 270 tty->print_cr("[TraceClassLoaderData] Adding k: " PTR_FORMAT " %s to CLD: "
260 PTR_FORMAT " loader: " PTR_FORMAT " %s", 271 PTR_FORMAT " loader: " PTR_FORMAT " %s",
261 k, 272 k,
262 k->external_name(), 273 k->external_name(),
263 k->class_loader_data(), 274 k->class_loader_data(),
264 k->class_loader(), 275 (void *)k->class_loader(),
265 loader_name()); 276 loader_name());
266 } 277 }
267 } 278 }
268 279
269 // This is called by InstanceKlass::deallocate_contents() to remove the 280 // This is called by InstanceKlass::deallocate_contents() to remove the
295 classes_do(InstanceKlass::notify_unload_class); 306 classes_do(InstanceKlass::notify_unload_class);
296 307
297 if (TraceClassLoaderData) { 308 if (TraceClassLoaderData) {
298 ResourceMark rm; 309 ResourceMark rm;
299 tty->print("[ClassLoaderData: unload loader data "PTR_FORMAT, this); 310 tty->print("[ClassLoaderData: unload loader data "PTR_FORMAT, this);
300 tty->print(" for instance "PTR_FORMAT" of %s", class_loader(), 311 tty->print(" for instance "PTR_FORMAT" of %s", (void *)class_loader(),
301 loader_name()); 312 loader_name());
302 if (is_anonymous()) { 313 if (is_anonymous()) {
303 tty->print(" for anonymous class "PTR_FORMAT " ", _klasses); 314 tty->print(" for anonymous class "PTR_FORMAT " ", _klasses);
304 } 315 }
305 tty->print_cr("]"); 316 tty->print_cr("]");
456 #undef CLD_DUMP_KLASSES 467 #undef CLD_DUMP_KLASSES
457 468
458 void ClassLoaderData::dump(outputStream * const out) { 469 void ClassLoaderData::dump(outputStream * const out) {
459 ResourceMark rm; 470 ResourceMark rm;
460 out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {", 471 out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {",
461 this, class_loader(), 472 this, (void *)class_loader(),
462 class_loader() != NULL ? class_loader()->klass() : NULL, loader_name()); 473 class_loader() != NULL ? class_loader()->klass() : NULL, loader_name());
463 if (claimed()) out->print(" claimed "); 474 if (claimed()) out->print(" claimed ");
464 if (is_unloading()) out->print(" unloading "); 475 if (is_unloading()) out->print(" unloading ");
465 out->print(" handles " INTPTR_FORMAT, handles()); 476 out->print(" handles " INTPTR_FORMAT, handles());
466 out->cr(); 477 out->cr();
551 if (exchanged == next) { 562 if (exchanged == next) {
552 if (TraceClassLoaderData) { 563 if (TraceClassLoaderData) {
553 ResourceMark rm; 564 ResourceMark rm;
554 tty->print("[ClassLoaderData: "); 565 tty->print("[ClassLoaderData: ");
555 tty->print("create class loader data "PTR_FORMAT, cld); 566 tty->print("create class loader data "PTR_FORMAT, cld);
556 tty->print(" for instance "PTR_FORMAT" of %s", cld->class_loader(), 567 tty->print(" for instance "PTR_FORMAT" of %s", (void *)cld->class_loader(),
557 cld->loader_name()); 568 cld->loader_name());
558 tty->print_cr("]"); 569 tty->print_cr("]");
559 } 570 }
560 return cld; 571 return cld;
561 } 572 }
595 } 606 }
596 607
597 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) { 608 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
598 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) { 609 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
599 cld->classes_do(f); 610 cld->classes_do(f);
611 }
612 }
613
614 void ClassLoaderDataGraph::loaded_classes_do(KlassClosure* klass_closure) {
615 for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
616 cld->loaded_classes_do(klass_closure);
600 } 617 }
601 } 618 }
602 619
603 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) { 620 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
604 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!"); 621 assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");