477 } 478 } 479 480 // These anonymous class loaders are to contain classes used for JSR292 481 ClassLoaderData* ClassLoaderData::anonymous_class_loader_data(oop loader, TRAPS) { 482 // Add a new class loader data to the graph. 483 return ClassLoaderDataGraph::add(loader, true, THREAD); 484 } 485 486 const char* ClassLoaderData::loader_name() { 487 // Handles null class loader 488 return SystemDictionary::loader_name(class_loader()); 489 } 490 491 #ifndef PRODUCT 492 // Define to dump klasses 493 #undef CLD_DUMP_KLASSES 494 495 void ClassLoaderData::dump(outputStream * const out) { 496 ResourceMark rm; 497 out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {", 498 p2i(this), p2i((void *)class_loader()), 499 p2i(class_loader() != NULL ? class_loader()->klass() : NULL), loader_name()); 500 if (claimed()) out->print(" claimed "); 501 if (is_unloading()) out->print(" unloading "); 502 out->print(" handles " INTPTR_FORMAT, p2i(handles())); 503 out->cr(); 504 if (metaspace_or_null() != NULL) { 505 out->print_cr("metaspace: " INTPTR_FORMAT, p2i(metaspace_or_null())); 506 metaspace_or_null()->dump(out); 507 } else { 508 out->print_cr("metaspace: NULL"); 509 } 510 511 #ifdef CLD_DUMP_KLASSES 512 if (Verbose) { 513 ResourceMark rm; 514 Klass* k = _klasses; 515 while (k != NULL) { 516 out->print_cr("klass "PTR_FORMAT", %s, CT: %d, MUT: %d", k, k->name()->as_C_string(), 517 k->has_modified_oops(), k->has_accumulated_modified_oops()); 518 assert(k != k->next_link(), "no loops!"); 519 k = k->next_link(); 520 } 521 } 522 #endif // CLD_DUMP_KLASSES 523 #undef CLD_DUMP_KLASSES 524 if (_jmethod_ids != NULL) { 525 Method::print_jmethod_ids(this, out); 526 } 527 out->print_cr("}"); 528 } 529 #endif // PRODUCT 530 531 void ClassLoaderData::verify() { 532 oop cl = class_loader(); 533 534 guarantee(this == class_loader_data(cl) || is_anonymous(), "Must be the same"); 535 guarantee(cl != NULL || this == ClassLoaderData::the_null_class_loader_data() || is_anonymous(), "must be"); 536 | 477 } 478 } 479 480 // These anonymous class loaders are to contain classes used for JSR292 481 ClassLoaderData* ClassLoaderData::anonymous_class_loader_data(oop loader, TRAPS) { 482 // Add a new class loader data to the graph. 483 return ClassLoaderDataGraph::add(loader, true, THREAD); 484 } 485 486 const char* ClassLoaderData::loader_name() { 487 // Handles null class loader 488 return SystemDictionary::loader_name(class_loader()); 489 } 490 491 #ifndef PRODUCT 492 // Define to dump klasses 493 #undef CLD_DUMP_KLASSES 494 495 void ClassLoaderData::dump(outputStream * const out) { 496 ResourceMark rm; 497 out->print("ClassLoaderData CLD: " PTR_FORMAT ", loader: " PTR_FORMAT ", loader_klass: " PTR_FORMAT " %s {", 498 p2i(this), p2i((void *)class_loader()), 499 p2i(class_loader() != NULL ? class_loader()->klass() : NULL), loader_name()); 500 if (claimed()) out->print(" claimed "); 501 if (is_unloading()) out->print(" unloading "); 502 out->print(" handles " INTPTR_FORMAT, p2i(handles())); 503 out->cr(); 504 if (metaspace_or_null() != NULL) { 505 out->print_cr("metaspace: " INTPTR_FORMAT, p2i(metaspace_or_null())); 506 metaspace_or_null()->dump(out); 507 } else { 508 out->print_cr("metaspace: NULL"); 509 } 510 511 #ifdef CLD_DUMP_KLASSES 512 if (Verbose) { 513 ResourceMark rm; 514 Klass* k = _klasses; 515 while (k != NULL) { 516 out->print_cr("klass " PTR_FORMAT ", %s, CT: %d, MUT: %d", k, k->name()->as_C_string(), 517 k->has_modified_oops(), k->has_accumulated_modified_oops()); 518 assert(k != k->next_link(), "no loops!"); 519 k = k->next_link(); 520 } 521 } 522 #endif // CLD_DUMP_KLASSES 523 #undef CLD_DUMP_KLASSES 524 if (_jmethod_ids != NULL) { 525 Method::print_jmethod_ids(this, out); 526 } 527 out->print_cr("}"); 528 } 529 #endif // PRODUCT 530 531 void ClassLoaderData::verify() { 532 oop cl = class_loader(); 533 534 guarantee(this == class_loader_data(cl) || is_anonymous(), "Must be the same"); 535 guarantee(cl != NULL || this == ClassLoaderData::the_null_class_loader_data() || is_anonymous(), "must be"); 536 |