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 }
|