void ClassLoaderData::loaded_classes_do(KlassClosure* klass_closure) { // Lock to avoid classes being modified/added/removed during iteration MutexLockerEx ml(metaspace_lock(), Mutex::_no_safepoint_check_flag); for (Klass* k = _klasses; k != NULL; k = k->next_link()) { // Do not filter ArrayKlass oops here... if (k->oop_is_array() || (k->oop_is_instance() && InstanceKlass::cast(k)->is_loaded())) { klass_closure->do_klass(k); } } }
// Casting from klassOop static arrayKlass* cast(klassOop k) { Klass* kp = k->klass_part(); assert(kp->null_vtbl() || kp->oop_is_array(), "cast to arrayKlass"); return (arrayKlass*) kp; }