< prev index next >

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

Print this page
rev 7992 : G1RootProcessor
rev 7993 : Convert G1 to G1RootProcessor
rev 7996 : imported patch trace-metadata-comment
rev 7998 : imported patch thomas-comments
rev 7999 : imported patch eriks-comments

*** 3091,3101 **** // and the nmethods in the code cache. G1VerifyCodeRootOopClosure codeRootsCl(this, &rootsCl, vo); G1VerifyCodeRootBlobClosure blobsCl(&codeRootsCl); { ! G1RootProcessor root_processor(this, false /* trace_metadata */); root_processor.process_all_roots(&rootsCl, &cldCl, &blobsCl); } --- 3091,3101 ---- // and the nmethods in the code cache. G1VerifyCodeRootOopClosure codeRootsCl(this, &rootsCl, vo); G1VerifyCodeRootBlobClosure blobsCl(&codeRootsCl); { ! G1RootProcessor root_processor(this); root_processor.process_all_roots(&rootsCl, &cldCl, &blobsCl); }
*** 4448,4464 **** --- 4448,4467 ---- OopClosure* strong_root_cl; OopClosure* weak_root_cl; CLDClosure* strong_cld_cl; CLDClosure* weak_cld_cl; + bool trace_metadata = false; + 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; if (ClassUnloadingWithConcurrentMark) { weak_root_cl = &scan_mark_weak_root_cl; weak_cld_cl = &scan_mark_weak_cld_cl; + trace_metadata = true; } else { weak_root_cl = &scan_mark_root_cl; weak_cld_cl = &scan_mark_cld_cl; } } else {
*** 4472,4481 **** --- 4475,4485 ---- _root_processor->evacuate_roots(strong_root_cl, weak_root_cl, strong_cld_cl, weak_cld_cl, + trace_metadata, worker_id); G1ParPushHeapRSClosure push_heap_rs_cl(_g1h, &pss); _root_processor->scan_remembered_sets(&push_heap_rs_cl, weak_root_cl,
*** 5462,5478 **** assert(dirty_card_queue_set().completed_buffers_num() == 0, "Should be empty"); double start_par_time_sec = os::elapsedTime(); double end_par_time_sec; { ! const bool during_im = g1_policy()->during_initial_mark_pause(); ! const bool trace_metadata = during_im && ClassUnloadingWithConcurrentMark; ! ! G1RootProcessor root_processor(this, trace_metadata); G1ParTask g1_par_task(this, _task_queues, &root_processor); // InitialMark needs claim bits to keep track of the marked-through CLDs. ! if (during_im) { ClassLoaderDataGraph::clear_claimed_marks(); } // The individual threads will set their evac-failure closures. if (PrintTerminationStats) G1ParScanThreadState::print_termination_stats_hdr(); --- 5466,5479 ---- assert(dirty_card_queue_set().completed_buffers_num() == 0, "Should be empty"); double start_par_time_sec = os::elapsedTime(); double end_par_time_sec; { ! G1RootProcessor root_processor(this); G1ParTask g1_par_task(this, _task_queues, &root_processor); // InitialMark needs claim bits to keep track of the marked-through CLDs. ! if (g1_policy()->during_initial_mark_pause()) { ClassLoaderDataGraph::clear_claimed_marks(); } // The individual threads will set their evac-failure closures. if (PrintTerminationStats) G1ParScanThreadState::print_termination_stats_hdr();
< prev index next >