< prev index next >

src/share/vm/classfile/classLoaderData.cpp

Print this page




 230 
 231 void ClassLoaderData::classes_do(KlassClosure* klass_closure) {
 232   // Lock-free access requires load_ptr_acquire
 233   for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
 234     klass_closure->do_klass(k);
 235     assert(k != k->next_link(), "no loops!");
 236   }
 237 }
 238 
 239 void ClassLoaderData::classes_do(void f(Klass * const)) {
 240   // Lock-free access requires load_ptr_acquire
 241   for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
 242     f(k);
 243     assert(k != k->next_link(), "no loops!");
 244   }
 245 }
 246 
 247 void ClassLoaderData::methods_do(void f(Method*)) {
 248   // Lock-free access requires load_ptr_acquire
 249   for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
 250     if (k->is_instance_klass()) {
 251       InstanceKlass::cast(k)->methods_do(f);
 252     }
 253   }
 254 }
 255 
 256 void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
 257   // Lock to avoid classes being modified/added/removed during iteration
 258   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 259   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 260     // Do not filter ArrayKlass oops here...
 261     if (k->is_array_klass() || (k->is_instance_klass() && InstanceKlass::cast(k)->is_loaded())) {
 262       klass_closure->do_klass(k);
 263     }
 264   }
 265 }
 266 
 267 void ClassLoaderData::classes_do(void f(InstanceKlass*)) {
 268   // Lock-free access requires load_ptr_acquire
 269   for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
 270     if (k->is_instance_klass()) {




 230 
 231 void ClassLoaderData::classes_do(KlassClosure* klass_closure) {
 232   // Lock-free access requires load_ptr_acquire
 233   for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
 234     klass_closure->do_klass(k);
 235     assert(k != k->next_link(), "no loops!");
 236   }
 237 }
 238 
 239 void ClassLoaderData::classes_do(void f(Klass * const)) {
 240   // Lock-free access requires load_ptr_acquire
 241   for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
 242     f(k);
 243     assert(k != k->next_link(), "no loops!");
 244   }
 245 }
 246 
 247 void ClassLoaderData::methods_do(void f(Method*)) {
 248   // Lock-free access requires load_ptr_acquire
 249   for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
 250     if (k->is_instance_klass() && InstanceKlass::cast(k)->is_loaded()) {
 251       InstanceKlass::cast(k)->methods_do(f);
 252     }
 253   }
 254 }
 255 
 256 void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) {
 257   // Lock to avoid classes being modified/added/removed during iteration
 258   MutexLockerEx ml(metaspace_lock(),  Mutex::_no_safepoint_check_flag);
 259   for (Klass* k = _klasses; k != NULL; k = k->next_link()) {
 260     // Do not filter ArrayKlass oops here...
 261     if (k->is_array_klass() || (k->is_instance_klass() && InstanceKlass::cast(k)->is_loaded())) {
 262       klass_closure->do_klass(k);
 263     }
 264   }
 265 }
 266 
 267 void ClassLoaderData::classes_do(void f(InstanceKlass*)) {
 268   // Lock-free access requires load_ptr_acquire
 269   for (Klass* k = load_ptr_acquire(&_klasses); k != NULL; k = k->next_link()) {
 270     if (k->is_instance_klass()) {


< prev index next >