Mercurial > hg > graal-jvmci-8
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!"); |