4749 assert(pss.queue_is_empty(), "should be empty");
4750
4751 // Close the inner scope so that the ResourceMark and HandleMark
4752 // destructors are executed here and are included as part of the
4753 // "GC Worker Time".
4754 }
4755
4756 double end_time_ms = os::elapsedTime() * 1000.0;
4757 _g1h->g1_policy()->phase_times()->record_gc_worker_end_time(worker_id, end_time_ms);
4758 }
4759 };
4760
4761 // *** Common G1 Evacuation Stuff
4762
4763 // This method is run in a GC worker.
4764
4765 void
4766 G1CollectedHeap::
4767 g1_process_roots(OopClosure* scan_non_heap_roots,
4768 OopClosure* scan_non_heap_weak_roots,
4769 OopsInHeapRegionClosure* scan_rs,
4770 CLDClosure* scan_strong_clds,
4771 CLDClosure* scan_weak_clds,
4772 CodeBlobClosure* scan_strong_code,
4773 uint worker_i) {
4774
4775 // First scan the shared roots.
4776 double ext_roots_start = os::elapsedTime();
4777 double closure_app_time_sec = 0.0;
4778
4779 bool during_im = _g1h->g1_policy()->during_initial_mark_pause();
4780 bool trace_metadata = during_im && ClassUnloadingWithConcurrentMark;
4781
4782 BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots);
4783 BufferingOopClosure buf_scan_non_heap_weak_roots(scan_non_heap_weak_roots);
4784
4785 process_roots(false, // no scoping; this is parallel code
4786 SharedHeap::SO_None,
4787 &buf_scan_non_heap_roots,
4788 &buf_scan_non_heap_weak_roots,
4789 scan_strong_clds,
|
4749 assert(pss.queue_is_empty(), "should be empty");
4750
4751 // Close the inner scope so that the ResourceMark and HandleMark
4752 // destructors are executed here and are included as part of the
4753 // "GC Worker Time".
4754 }
4755
4756 double end_time_ms = os::elapsedTime() * 1000.0;
4757 _g1h->g1_policy()->phase_times()->record_gc_worker_end_time(worker_id, end_time_ms);
4758 }
4759 };
4760
4761 // *** Common G1 Evacuation Stuff
4762
4763 // This method is run in a GC worker.
4764
4765 void
4766 G1CollectedHeap::
4767 g1_process_roots(OopClosure* scan_non_heap_roots,
4768 OopClosure* scan_non_heap_weak_roots,
4769 G1ParPushHeapRSClosure* scan_rs,
4770 CLDClosure* scan_strong_clds,
4771 CLDClosure* scan_weak_clds,
4772 CodeBlobClosure* scan_strong_code,
4773 uint worker_i) {
4774
4775 // First scan the shared roots.
4776 double ext_roots_start = os::elapsedTime();
4777 double closure_app_time_sec = 0.0;
4778
4779 bool during_im = _g1h->g1_policy()->during_initial_mark_pause();
4780 bool trace_metadata = during_im && ClassUnloadingWithConcurrentMark;
4781
4782 BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots);
4783 BufferingOopClosure buf_scan_non_heap_weak_roots(scan_non_heap_weak_roots);
4784
4785 process_roots(false, // no scoping; this is parallel code
4786 SharedHeap::SO_None,
4787 &buf_scan_non_heap_roots,
4788 &buf_scan_non_heap_weak_roots,
4789 scan_strong_clds,
|