< prev index next >

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

Print this page
rev 7992 : G1RootProcessor
rev 7993 : Convert G1 to G1RootProcessor
rev 7994 : Move remaining root processing to GenCollectedHeap
rev 7997 : imported patch rename-done_with_threads
rev 7998 : imported patch thomas-comments
rev 7999 : imported patch eriks-comments

*** 111,132 **** _lock.wait(Mutex::_no_safepoint_check_flag, 0, false); } } } ! G1RootProcessor::G1RootProcessor(G1CollectedHeap* g1h, bool trace_metadata) : _g1h(g1h), _process_strong_tasks(new SubTasksDone(G1RP_PS_NumElements)), _srs(g1h), _lock(Mutex::leaf, "G1 Root Scanning barrier lock", false, Monitor::_safepoint_check_never), ! _n_workers_discovered_strong_classes(0), ! _trace_metadata(trace_metadata) {} void G1RootProcessor::evacuate_roots(OopClosure* scan_non_heap_roots, OopClosure* scan_non_heap_weak_roots, CLDClosure* scan_strong_clds, CLDClosure* scan_weak_clds, uint worker_i) { // First scan the shared roots. double ext_roots_start = os::elapsedTime(); BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots); --- 111,132 ---- _lock.wait(Mutex::_no_safepoint_check_flag, 0, false); } } } ! G1RootProcessor::G1RootProcessor(G1CollectedHeap* g1h) : _g1h(g1h), _process_strong_tasks(new SubTasksDone(G1RP_PS_NumElements)), _srs(g1h), _lock(Mutex::leaf, "G1 Root Scanning barrier lock", false, Monitor::_safepoint_check_never), ! _n_workers_discovered_strong_classes(0) {} void G1RootProcessor::evacuate_roots(OopClosure* scan_non_heap_roots, OopClosure* scan_non_heap_weak_roots, CLDClosure* scan_strong_clds, CLDClosure* scan_weak_clds, + bool trace_metadata, uint worker_i) { // First scan the shared roots. double ext_roots_start = os::elapsedTime(); BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots);
*** 137,154 **** // CodeBlobClosures are not interoperable with BufferingOopClosures G1CodeBlobClosure root_code_blobs(scan_non_heap_roots); process_java_roots(strong_roots, ! _trace_metadata ? scan_strong_clds : NULL, scan_strong_clds, ! _trace_metadata ? NULL : scan_weak_clds, &root_code_blobs); // This is the point where this worker thread will not find more strong CLDs/nmethods. // Report this so G1 can synchronize the strong and weak CLDs/nmethods processing. ! if (_trace_metadata) { worker_has_discovered_all_strong_classes(); } process_vm_roots(strong_roots, weak_roots); --- 137,154 ---- // CodeBlobClosures are not interoperable with BufferingOopClosures G1CodeBlobClosure root_code_blobs(scan_non_heap_roots); process_java_roots(strong_roots, ! trace_metadata ? scan_strong_clds : NULL, scan_strong_clds, ! trace_metadata ? NULL : scan_weak_clds, &root_code_blobs); // This is the point where this worker thread will not find more strong CLDs/nmethods. // Report this so G1 can synchronize the strong and weak CLDs/nmethods processing. ! if (trace_metadata) { worker_has_discovered_all_strong_classes(); } process_vm_roots(strong_roots, weak_roots);
*** 159,169 **** // (which are added by the marking threads) on them live // until they can be processed at the end of marking. _g1h->ref_processor_cm()->weak_oops_do(&buf_scan_non_heap_roots); } ! if (_trace_metadata) { // Barrier to make sure all workers passed // the strong CLD and strong nmethods phases. wait_until_all_strong_classes_discovered(); // Now take the complement of the strong CLDs. --- 159,169 ---- // (which are added by the marking threads) on them live // until they can be processed at the end of marking. _g1h->ref_processor_cm()->weak_oops_do(&buf_scan_non_heap_roots); } ! if (trace_metadata) { // Barrier to make sure all workers passed // the strong CLD and strong nmethods phases. wait_until_all_strong_classes_discovered(); // Now take the complement of the strong CLDs.
< prev index next >