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

Print this page

        

*** 4918,4931 **** CodeBlobClosure* strong_code_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. strong_root_cl = &scan_mark_root_cl; - weak_root_cl = &scan_mark_weak_root_cl; strong_cld_cl = &scan_mark_cld_cl; - weak_cld_cl = &scan_mark_weak_cld_cl; strong_code_cl = &scan_mark_code_cl; } else { strong_root_cl = &scan_only_root_cl; weak_root_cl = &scan_only_root_cl; strong_cld_cl = &scan_only_cld_cl; weak_cld_cl = &scan_only_cld_cl; --- 4918,4936 ---- CodeBlobClosure* strong_code_cl; if (_g1h->g1_policy()->during_initial_mark_pause()) { // We also need to mark copied objects. strong_root_cl = &scan_mark_root_cl; strong_cld_cl = &scan_mark_cld_cl; strong_code_cl = &scan_mark_code_cl; + if (ClassUnloadingWithConcurrentMark) { + weak_root_cl = &scan_mark_weak_root_cl; + weak_cld_cl = &scan_mark_weak_cld_cl; + } else { + weak_root_cl = &scan_mark_root_cl; + weak_cld_cl = &scan_mark_cld_cl; + } } else { strong_root_cl = &scan_only_root_cl; weak_root_cl = &scan_only_root_cl; strong_cld_cl = &scan_only_cld_cl; weak_cld_cl = &scan_only_cld_cl;
*** 4992,5012 **** // First scan the shared roots. double ext_roots_start = os::elapsedTime(); double closure_app_time_sec = 0.0; bool during_im = _g1h->g1_policy()->during_initial_mark_pause(); BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots); BufferingOopClosure buf_scan_non_heap_weak_roots(scan_non_heap_weak_roots); process_roots(false, // no scoping; this is parallel code SharedHeap::SO_None, &buf_scan_non_heap_roots, &buf_scan_non_heap_weak_roots, scan_strong_clds, ! // Initial Mark handles the weak CLDs separately. ! (during_im ? NULL : scan_weak_clds), scan_strong_code); // Now the CM ref_processor roots. if (!_process_strong_tasks->is_task_claimed(G1H_PS_refProcessor_oops_do)) { // We need to treat the discovered reference lists of the --- 4997,5018 ---- // First scan the shared roots. double ext_roots_start = os::elapsedTime(); double closure_app_time_sec = 0.0; bool during_im = _g1h->g1_policy()->during_initial_mark_pause(); + bool trace_metadata = during_im && ClassUnloadingWithConcurrentMark; BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots); BufferingOopClosure buf_scan_non_heap_weak_roots(scan_non_heap_weak_roots); process_roots(false, // no scoping; this is parallel code SharedHeap::SO_None, &buf_scan_non_heap_roots, &buf_scan_non_heap_weak_roots, scan_strong_clds, ! // Unloading Initial Marks handle the weak CLDs separately. ! (trace_metadata ? NULL : scan_weak_clds), scan_strong_code); // Now the CM ref_processor roots. if (!_process_strong_tasks->is_task_claimed(G1H_PS_refProcessor_oops_do)) { // We need to treat the discovered reference lists of the
*** 5014,5024 **** // (which are added by the marking threads) on them live // until they can be processed at the end of marking. ref_processor_cm()->weak_oops_do(&buf_scan_non_heap_roots); } ! if (during_im) { // Barrier to make sure all workers passed // the strong CLD and strong nmethods phases. active_strong_roots_scope()->wait_until_all_workers_done_with_threads(n_par_threads()); // Now take the complement of the strong CLDs. --- 5020,5030 ---- // (which are added by the marking threads) on them live // until they can be processed at the end of marking. 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. active_strong_roots_scope()->wait_until_all_workers_done_with_threads(n_par_threads()); // Now take the complement of the strong CLDs.
*** 6040,6049 **** --- 6046,6056 ---- double end_par_time_sec; { StrongRootsScope srs(this); // InitialMark needs claim bits to keep track of the marked-through CLDs. + // FIXME: Needed? if (g1_policy()->during_initial_mark_pause()) { ClassLoaderDataGraph::clear_claimed_marks(); } if (G1CollectedHeap::use_parallel_gc_threads()) {