src/share/vm/classfile/classLoaderData.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/classfile

src/share/vm/classfile/classLoaderData.cpp

Print this page
rev 6132 : 8037970: make PrintMethodData a diagnostic options
Summary: make PrintMethodData a diagnostic options for performance investigation
Reviewed-by:


 118   }
 119 }
 120 
 121 void ClassLoaderData::Dependencies::oops_do(OopClosure* f) {
 122   f->do_oop((oop*)&_list_head);
 123 }
 124 
 125 void ClassLoaderData::classes_do(KlassClosure* klass_closure) {
 126   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 127     klass_closure->do_klass(k);
 128     assert(k != k->next_link(), "no loops!");
 129   }
 130 }
 131 
 132 void ClassLoaderData::classes_do(void f(Klass * const)) {
 133   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 134     f(k);
 135   }
 136 }
 137 








 138 void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
 139   // Lock to avoid classes being modified/added/removed during iteration
 140   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 141   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 142     // Do not filter ArrayKlass oops here...
 143     if (k->oop_is_array() || (k->oop_is_instance() && InstanceKlass::cast(k)->is_loaded())) {
 144       klass_closure->do_klass(k);
 145     }
 146   }
 147 }
 148 
 149 void ClassLoaderData::classes_do(void f(InstanceKlass*)) {
 150   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 151     if (k->oop_is_instance()) {
 152       f(InstanceKlass::cast(k));
 153     }
 154     assert(k != k->next_link(), "no loops!");
 155   }
 156 }
 157 


 604   }
 605 }
 606 
 607 void ClassLoaderDataGraph::always_strong_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
 608   if (ClassUnloading) {
 609     ClassLoaderDataGraph::keep_alive_oops_do(f, klass_closure, must_claim);
 610   } else {
 611     ClassLoaderDataGraph::oops_do(f, klass_closure, must_claim);
 612   }
 613 }
 614 
 615 void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
 616   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 617     cld->classes_do(klass_closure);
 618   }
 619 }
 620 
 621 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
 622   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 623     cld->classes_do(f);






 624   }
 625 }
 626 
 627 void ClassLoaderDataGraph::loaded_classes_do(KlassClosure* klass_closure) {
 628   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 629     cld->loaded_classes_do(klass_closure);
 630   }
 631 }
 632 
 633 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
 634   assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
 635   for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) {
 636     cld->classes_do(f);
 637   }
 638 }
 639 
 640 GrowableArray<ClassLoaderData*>* ClassLoaderDataGraph::new_clds() {
 641   assert(_head == NULL || _saved_head != NULL, "remember_new_clds(true) not called?");
 642 
 643   GrowableArray<ClassLoaderData*>* array = new GrowableArray<ClassLoaderData*>();




 118   }
 119 }
 120 
 121 void ClassLoaderData::Dependencies::oops_do(OopClosure* f) {
 122   f->do_oop((oop*)&_list_head);
 123 }
 124 
 125 void ClassLoaderData::classes_do(KlassClosure* klass_closure) {
 126   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 127     klass_closure->do_klass(k);
 128     assert(k != k->next_link(), "no loops!");
 129   }
 130 }
 131 
 132 void ClassLoaderData::classes_do(void f(Klass * const)) {
 133   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 134     f(k);
 135   }
 136 }
 137 
 138 void ClassLoaderData::methods_do(void f(Method*)) {
 139   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 140     if (k->oop_is_instance()) {
 141       InstanceKlass::cast(k)->methods_do(f);
 142     }
 143   }
 144 }
 145 
 146 void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
 147   // Lock to avoid classes being modified/added/removed during iteration
 148   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 149   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 150     // Do not filter ArrayKlass oops here...
 151     if (k->oop_is_array() || (k->oop_is_instance() && InstanceKlass::cast(k)->is_loaded())) {
 152       klass_closure->do_klass(k);
 153     }
 154   }
 155 }
 156 
 157 void ClassLoaderData::classes_do(void f(InstanceKlass*)) {
 158   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 159     if (k->oop_is_instance()) {
 160       f(InstanceKlass::cast(k));
 161     }
 162     assert(k != k->next_link(), "no loops!");
 163   }
 164 }
 165 


 612   }
 613 }
 614 
 615 void ClassLoaderDataGraph::always_strong_oops_do(OopClosure* f, KlassClosure* klass_closure, bool must_claim) {
 616   if (ClassUnloading) {
 617     ClassLoaderDataGraph::keep_alive_oops_do(f, klass_closure, must_claim);
 618   } else {
 619     ClassLoaderDataGraph::oops_do(f, klass_closure, must_claim);
 620   }
 621 }
 622 
 623 void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
 624   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 625     cld->classes_do(klass_closure);
 626   }
 627 }
 628 
 629 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
 630   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 631     cld->classes_do(f);
 632   }
 633 }
 634 
 635 void ClassLoaderDataGraph::methods_do(void f(Method*)) {
 636   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 637     cld->methods_do(f);
 638   }
 639 }
 640 
 641 void ClassLoaderDataGraph::loaded_classes_do(KlassClosure* klass_closure) {
 642   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
 643     cld->loaded_classes_do(klass_closure);
 644   }
 645 }
 646 
 647 void ClassLoaderDataGraph::classes_unloading_do(void f(Klass* const)) {
 648   assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
 649   for (ClassLoaderData* cld = _unloading; cld != NULL; cld = cld->next()) {
 650     cld->classes_do(f);
 651   }
 652 }
 653 
 654 GrowableArray<ClassLoaderData*>* ClassLoaderDataGraph::new_clds() {
 655   assert(_head == NULL || _saved_head != NULL, "remember_new_clds(true) not called?");
 656 
 657   GrowableArray<ClassLoaderData*>* array = new GrowableArray<ClassLoaderData*>();


src/share/vm/classfile/classLoaderData.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File