279 |
279 |
280 if (TraceClassLoaderData && Verbose && k->class_loader_data() != NULL) { |
280 if (TraceClassLoaderData && Verbose && k->class_loader_data() != NULL) { |
281 ResourceMark rm; |
281 ResourceMark rm; |
282 tty->print_cr("[TraceClassLoaderData] Adding k: " PTR_FORMAT " %s to CLD: " |
282 tty->print_cr("[TraceClassLoaderData] Adding k: " PTR_FORMAT " %s to CLD: " |
283 PTR_FORMAT " loader: " PTR_FORMAT " %s", |
283 PTR_FORMAT " loader: " PTR_FORMAT " %s", |
284 k, |
284 p2i(k), |
285 k->external_name(), |
285 k->external_name(), |
286 k->class_loader_data(), |
286 p2i(k->class_loader_data()), |
287 (void *)k->class_loader(), |
287 p2i((void *)k->class_loader()), |
288 loader_name()); |
288 loader_name()); |
289 } |
289 } |
290 } |
290 } |
291 |
291 |
292 // This is called by InstanceKlass::deallocate_contents() to remove the |
292 // This is called by InstanceKlass::deallocate_contents() to remove the |
317 // Tell serviceability tools these classes are unloading |
317 // Tell serviceability tools these classes are unloading |
318 classes_do(InstanceKlass::notify_unload_class); |
318 classes_do(InstanceKlass::notify_unload_class); |
319 |
319 |
320 if (TraceClassLoaderData) { |
320 if (TraceClassLoaderData) { |
321 ResourceMark rm; |
321 ResourceMark rm; |
322 tty->print("[ClassLoaderData: unload loader data "PTR_FORMAT, this); |
322 tty->print("[ClassLoaderData: unload loader data " INTPTR_FORMAT, p2i(this)); |
323 tty->print(" for instance "PTR_FORMAT" of %s", (void *)class_loader(), |
323 tty->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)class_loader()), |
324 loader_name()); |
324 loader_name()); |
325 if (is_anonymous()) { |
325 if (is_anonymous()) { |
326 tty->print(" for anonymous class "PTR_FORMAT " ", _klasses); |
326 tty->print(" for anonymous class " INTPTR_FORMAT " ", p2i(_klasses)); |
327 } |
327 } |
328 tty->print_cr("]"); |
328 tty->print_cr("]"); |
329 } |
329 } |
330 } |
330 } |
331 |
331 |
483 #undef CLD_DUMP_KLASSES |
483 #undef CLD_DUMP_KLASSES |
484 |
484 |
485 void ClassLoaderData::dump(outputStream * const out) { |
485 void ClassLoaderData::dump(outputStream * const out) { |
486 ResourceMark rm; |
486 ResourceMark rm; |
487 out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {", |
487 out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {", |
488 this, (void *)class_loader(), |
488 p2i(this), p2i((void *)class_loader()), |
489 class_loader() != NULL ? class_loader()->klass() : NULL, loader_name()); |
489 p2i(class_loader() != NULL ? class_loader()->klass() : NULL), loader_name()); |
490 if (claimed()) out->print(" claimed "); |
490 if (claimed()) out->print(" claimed "); |
491 if (is_unloading()) out->print(" unloading "); |
491 if (is_unloading()) out->print(" unloading "); |
492 out->print(" handles " INTPTR_FORMAT, handles()); |
492 out->print(" handles " INTPTR_FORMAT, p2i(handles())); |
493 out->cr(); |
493 out->cr(); |
494 if (metaspace_or_null() != NULL) { |
494 if (metaspace_or_null() != NULL) { |
495 out->print_cr("metaspace: " PTR_FORMAT, metaspace_or_null()); |
495 out->print_cr("metaspace: " INTPTR_FORMAT, p2i(metaspace_or_null())); |
496 metaspace_or_null()->dump(out); |
496 metaspace_or_null()->dump(out); |
497 } else { |
497 } else { |
498 out->print_cr("metaspace: NULL"); |
498 out->print_cr("metaspace: NULL"); |
499 } |
499 } |
500 |
500 |
584 ClassLoaderData* exchanged = (ClassLoaderData*)Atomic::cmpxchg_ptr(cld, list_head, next); |
584 ClassLoaderData* exchanged = (ClassLoaderData*)Atomic::cmpxchg_ptr(cld, list_head, next); |
585 if (exchanged == next) { |
585 if (exchanged == next) { |
586 if (TraceClassLoaderData) { |
586 if (TraceClassLoaderData) { |
587 ResourceMark rm; |
587 ResourceMark rm; |
588 tty->print("[ClassLoaderData: "); |
588 tty->print("[ClassLoaderData: "); |
589 tty->print("create class loader data "PTR_FORMAT, cld); |
589 tty->print("create class loader data " INTPTR_FORMAT, p2i(cld)); |
590 tty->print(" for instance "PTR_FORMAT" of %s", (void *)cld->class_loader(), |
590 tty->print(" for instance " INTPTR_FORMAT " of %s", p2i((void *)cld->class_loader()), |
591 cld->loader_name()); |
591 cld->loader_name()); |
592 tty->print_cr("]"); |
592 tty->print_cr("]"); |
593 } |
593 } |
594 return cld; |
594 return cld; |
595 } |
595 } |
845 |
845 |
846 void ClassLoaderData::print_value_on(outputStream* out) const { |
846 void ClassLoaderData::print_value_on(outputStream* out) const { |
847 if (class_loader() == NULL) { |
847 if (class_loader() == NULL) { |
848 out->print("NULL class_loader"); |
848 out->print("NULL class_loader"); |
849 } else { |
849 } else { |
850 out->print("class loader "PTR_FORMAT, this); |
850 out->print("class loader " INTPTR_FORMAT, p2i(this)); |
851 class_loader()->print_value_on(out); |
851 class_loader()->print_value_on(out); |
852 } |
852 } |
853 } |
853 } |
854 |
854 |
855 #if INCLUDE_TRACE |
855 #if INCLUDE_TRACE |