8209738: Remove ClassLoaderDataGraph::*oops_do functions

Make walking CLDG more consistent.

Reviewed-by: dholmes, tschatzl
This commit is contained in:
Coleen Phillimore 2018-08-21 09:33:41 -04:00
parent f6bcc38500
commit dc556f4086
6 changed files with 9 additions and 34 deletions

View file

@ -1119,28 +1119,6 @@ ClassLoaderData* ClassLoaderDataGraph::add(Handle loader, bool is_unsafe_anonymo
return loader_data; return loader_data;
} }
void ClassLoaderDataGraph::oops_do(OopClosure* f, bool must_claim) {
for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
cld->oops_do(f, must_claim);
}
}
void ClassLoaderDataGraph::keep_alive_oops_do(OopClosure* f, bool must_claim) {
for (ClassLoaderData* cld = _head; cld != NULL; cld = cld->next()) {
if (cld->keep_alive()) {
cld->oops_do(f, must_claim);
}
}
}
void ClassLoaderDataGraph::always_strong_oops_do(OopClosure* f, bool must_claim) {
if (ClassUnloading) {
keep_alive_oops_do(f, must_claim);
} else {
oops_do(f, must_claim);
}
}
void ClassLoaderDataGraph::cld_do(CLDClosure* cl) { void ClassLoaderDataGraph::cld_do(CLDClosure* cl) {
for (ClassLoaderData* cld = _head; cl != NULL && cld != NULL; cld = cld->next()) { for (ClassLoaderData* cld = _head; cl != NULL && cld != NULL; cld = cld->next()) {
cl->do_cld(cld); cl->do_cld(cld);

View file

@ -100,11 +100,7 @@ class ClassLoaderDataGraph : public AllStatic {
static void clean_module_and_package_info(); static void clean_module_and_package_info();
static void purge(); static void purge();
static void clear_claimed_marks(); static void clear_claimed_marks();
// oops do // Iteration through CLDG inside a safepoint; GC support
static void oops_do(OopClosure* f, bool must_claim);
static void keep_alive_oops_do(OopClosure* blk, bool must_claim);
static void always_strong_oops_do(OopClosure* blk, bool must_claim);
// cld do
static void cld_do(CLDClosure* cl); static void cld_do(CLDClosure* cl);
static void cld_unloading_do(CLDClosure* cl); static void cld_unloading_do(CLDClosure* cl);
static void roots_cld_do(CLDClosure* strong, CLDClosure* weak); static void roots_cld_do(CLDClosure* strong, CLDClosure* weak);

View file

@ -293,9 +293,6 @@ public:
static void allocate_shared_data_arrays(int size, TRAPS); static void allocate_shared_data_arrays(int size, TRAPS);
static void oops_do(OopClosure* f); static void oops_do(OopClosure* f);
static void roots_oops_do(OopClosure* f) {
oops_do(f);
}
// Check if sharing is supported for the class loader. // Check if sharing is supported for the class loader.
static bool is_sharing_possible(ClassLoaderData* loader_data); static bool is_sharing_possible(ClassLoaderData* loader_data);

View file

@ -107,8 +107,10 @@ void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) {
SystemDictionary::oops_do(&mark_and_push_closure); SystemDictionary::oops_do(&mark_and_push_closure);
break; break;
case class_loader_data: case class_loader_data: {
ClassLoaderDataGraph::always_strong_oops_do(&mark_and_push_closure, true); CLDToOopClosure cld_closure(&mark_and_push_closure);
ClassLoaderDataGraph::always_strong_cld_do(&cld_closure);
}
break; break;
case code_cache: case code_cache:

View file

@ -2188,7 +2188,8 @@ void PSParallelCompact::adjust_roots(ParCompactionManager* cm) {
Management::oops_do(&oop_closure); Management::oops_do(&oop_closure);
JvmtiExport::oops_do(&oop_closure); JvmtiExport::oops_do(&oop_closure);
SystemDictionary::oops_do(&oop_closure); SystemDictionary::oops_do(&oop_closure);
ClassLoaderDataGraph::oops_do(&oop_closure, true); CLDToOopClosure cld_closure(&oop_closure);
ClassLoaderDataGraph::cld_do(&cld_closure);
// Now adjust pointers in remaining weak roots. (All of which should // Now adjust pointers in remaining weak roots. (All of which should
// have been cleared if they pointed to non-surviving objects.) // have been cleared if they pointed to non-surviving objects.)

View file

@ -3009,7 +3009,8 @@ inline bool VM_HeapWalkOperation::collect_simple_roots() {
// Preloaded classes and loader from the system dictionary // Preloaded classes and loader from the system dictionary
blk.set_kind(JVMTI_HEAP_REFERENCE_SYSTEM_CLASS); blk.set_kind(JVMTI_HEAP_REFERENCE_SYSTEM_CLASS);
SystemDictionary::oops_do(&blk); SystemDictionary::oops_do(&blk);
ClassLoaderDataGraph::always_strong_oops_do(&blk, false); CLDToOopClosure cld_closure(&blk, false);
ClassLoaderDataGraph::always_strong_cld_do(&cld_closure);
if (blk.stopped()) { if (blk.stopped()) {
return false; return false;
} }