< prev index next >

src/share/vm/gc/g1/g1RootProcessor.cpp

Print this page
rev 11874 : 8114823: G1 doesn't honor request to disable class unloading
Reviewed-by:

*** 81,90 **** --- 81,91 ---- if (closures->trace_metadata()) { worker_has_discovered_all_strong_classes(); } process_vm_roots(closures, phase_times, worker_i); + process_string_table_roots(closures, phase_times, worker_i); { // Now the CM ref_processor roots. G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::CMRefRoots, worker_i); if (!_process_strong_tasks.is_task_claimed(G1RP_PS_refProcessor_oops_do)) {
*** 195,207 **** AllRootsClosures closures(oops, clds); process_java_roots(&closures, NULL, 0); process_vm_roots(&closures, NULL, 0); ! if (!_process_strong_tasks.is_task_claimed(G1RP_PS_CodeCache_oops_do)) { ! CodeCache::blobs_do(blobs); ! } _process_strong_tasks.all_tasks_completed(n_workers()); } void G1RootProcessor::process_java_roots(G1RootClosures* closures, --- 196,221 ---- AllRootsClosures closures(oops, clds); process_java_roots(&closures, NULL, 0); process_vm_roots(&closures, NULL, 0); ! process_string_table_roots(&closures, NULL, 0); ! process_code_cache_roots(blobs, NULL, 0); ! ! _process_strong_tasks.all_tasks_completed(n_workers()); ! } ! ! void G1RootProcessor::process_all_roots_no_string_table(OopClosure* oops, ! CLDClosure* clds, ! CodeBlobClosure* blobs) { ! assert(!ClassUnloading, "Should only be used when class unloading is disabled"); ! AllRootsClosures closures(oops, clds); ! ! process_java_roots(&closures, NULL, 0); ! process_vm_roots(&closures, NULL, 0); ! ! process_code_cache_roots(blobs, NULL, 0); _process_strong_tasks.all_tasks_completed(n_workers()); } void G1RootProcessor::process_java_roots(G1RootClosures* closures,
*** 278,295 **** G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::SystemDictionaryRoots, worker_i); if (!_process_strong_tasks.is_task_claimed(G1RP_PS_SystemDictionary_oops_do)) { SystemDictionary::roots_oops_do(strong_roots, weak_roots); } } ! { G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::StringTableRoots, worker_i); // All threads execute the following. A specific chunk of buckets // from the StringTable are the individual tasks. ! if (weak_roots != NULL) { ! StringTable::possibly_parallel_oops_do(weak_roots); ! } } } uint G1RootProcessor::n_workers() const { return _srs.n_threads(); --- 292,318 ---- G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::SystemDictionaryRoots, worker_i); if (!_process_strong_tasks.is_task_claimed(G1RP_PS_SystemDictionary_oops_do)) { SystemDictionary::roots_oops_do(strong_roots, weak_roots); } } + } ! void G1RootProcessor::process_string_table_roots(G1RootClosures* closures, ! G1GCPhaseTimes* phase_times, ! uint worker_i) { ! assert(closures->weak_oops() != NULL, "Should only be called when all roots are processed"); G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::StringTableRoots, worker_i); // All threads execute the following. A specific chunk of buckets // from the StringTable are the individual tasks. ! StringTable::possibly_parallel_oops_do(closures->weak_oops()); ! } ! ! void G1RootProcessor::process_code_cache_roots(CodeBlobClosure* code_closure, ! G1GCPhaseTimes* phase_times, ! uint worker_i) { ! if (!_process_strong_tasks.is_task_claimed(G1RP_PS_CodeCache_oops_do)) { ! CodeCache::blobs_do(code_closure); } } uint G1RootProcessor::n_workers() const { return _srs.n_threads();
< prev index next >