< prev index next >

src/hotspot/share/classfile/classLoaderData.cpp

Print this page




1127 
1128 void ClassLoaderDataGraph::cld_unloading_do(CLDClosure* cl) {
1129   assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
1130   // Only walk the head until any clds not purged from prior unloading
1131   // (CMS doesn't purge right away).
1132   for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
1133     assert(cld->is_unloading(), "invariant");
1134     cl->do_cld(cld);
1135   }
1136 }
1137 
1138 void ClassLoaderDataGraph::roots_cld_do(CLDClosure* strong, CLDClosure* weak) {
1139   for (ClassLoaderData* cld = _head;  cld != NULL; cld = cld->_next) {
1140     CLDClosure* closure = cld->keep_alive() ? strong : weak;
1141     if (closure != NULL) {
1142       closure->do_cld(cld);
1143     }
1144   }
1145 }
1146 
1147 void ClassLoaderDataGraph::keep_alive_cld_do(CLDClosure* cl) {
1148   roots_cld_do(cl, NULL);
1149 }
1150 
1151 void ClassLoaderDataGraph::always_strong_cld_do(CLDClosure* cl) {
1152   if (ClassUnloading) {
1153     keep_alive_cld_do(cl);
1154   } else {
1155     cld_do(cl);
1156   }
1157 }
1158 
1159 void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
1160   Thread* thread = Thread::current();
1161   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
1162     Handle holder(thread, cld->holder_phantom());
1163     cld->classes_do(klass_closure);
1164   }
1165 }
1166 
1167 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
1168   Thread* thread = Thread::current();
1169   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
1170     Handle holder(thread, cld->holder_phantom());
1171     cld->classes_do(f);
1172   }
1173 }




1127 
1128 void ClassLoaderDataGraph::cld_unloading_do(CLDClosure* cl) {
1129   assert(SafepointSynchronize::is_at_safepoint(), "must be at safepoint!");
1130   // Only walk the head until any clds not purged from prior unloading
1131   // (CMS doesn't purge right away).
1132   for (ClassLoaderData* cld = _unloading; cld != _saved_unloading; cld = cld->next()) {
1133     assert(cld->is_unloading(), "invariant");
1134     cl->do_cld(cld);
1135   }
1136 }
1137 
1138 void ClassLoaderDataGraph::roots_cld_do(CLDClosure* strong, CLDClosure* weak) {
1139   for (ClassLoaderData* cld = _head;  cld != NULL; cld = cld->_next) {
1140     CLDClosure* closure = cld->keep_alive() ? strong : weak;
1141     if (closure != NULL) {
1142       closure->do_cld(cld);
1143     }
1144   }
1145 }
1146 




1147 void ClassLoaderDataGraph::always_strong_cld_do(CLDClosure* cl) {
1148   if (ClassUnloading) {
1149     roots_cld_do(cl, NULL);
1150   } else {
1151     cld_do(cl);
1152   }
1153 }
1154 
1155 void ClassLoaderDataGraph::classes_do(KlassClosure* klass_closure) {
1156   Thread* thread = Thread::current();
1157   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
1158     Handle holder(thread, cld->holder_phantom());
1159     cld->classes_do(klass_closure);
1160   }
1161 }
1162 
1163 void ClassLoaderDataGraph::classes_do(void f(Klass* const)) {
1164   Thread* thread = Thread::current();
1165   for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
1166     Handle holder(thread, cld->holder_phantom());
1167     cld->classes_do(f);
1168   }
1169 }


< prev index next >