4592 assert(pss.queue_is_empty(), "should be empty");
4593
4594 // Close the inner scope so that the ResourceMark and HandleMark
4595 // destructors are executed here and are included as part of the
4596 // "GC Worker Time".
4597 }
4598
4599 double end_time_ms = os::elapsedTime() * 1000.0;
4600 _g1h->g1_policy()->phase_times()->record_gc_worker_end_time(worker_id, end_time_ms);
4601 }
4602 };
4603
4604 // *** Common G1 Evacuation Stuff
4605
4606 // This method is run in a GC worker.
4607
4608 void
4609 G1CollectedHeap::
4610 g1_process_roots(OopClosure* scan_non_heap_roots,
4611 OopClosure* scan_non_heap_weak_roots,
4612 OopsInHeapRegionClosure* scan_rs,
4613 CLDClosure* scan_strong_clds,
4614 CLDClosure* scan_weak_clds,
4615 CodeBlobClosure* scan_strong_code,
4616 uint worker_i) {
4617
4618 // First scan the shared roots.
4619 double ext_roots_start = os::elapsedTime();
4620 double closure_app_time_sec = 0.0;
4621
4622 bool during_im = _g1h->g1_policy()->during_initial_mark_pause();
4623 bool trace_metadata = during_im && ClassUnloadingWithConcurrentMark;
4624
4625 BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots);
4626 BufferingOopClosure buf_scan_non_heap_weak_roots(scan_non_heap_weak_roots);
4627
4628 process_roots(false, // no scoping; this is parallel code
4629 SharedHeap::SO_None,
4630 &buf_scan_non_heap_roots,
4631 &buf_scan_non_heap_weak_roots,
4632 scan_strong_clds,
|
4592 assert(pss.queue_is_empty(), "should be empty");
4593
4594 // Close the inner scope so that the ResourceMark and HandleMark
4595 // destructors are executed here and are included as part of the
4596 // "GC Worker Time".
4597 }
4598
4599 double end_time_ms = os::elapsedTime() * 1000.0;
4600 _g1h->g1_policy()->phase_times()->record_gc_worker_end_time(worker_id, end_time_ms);
4601 }
4602 };
4603
4604 // *** Common G1 Evacuation Stuff
4605
4606 // This method is run in a GC worker.
4607
4608 void
4609 G1CollectedHeap::
4610 g1_process_roots(OopClosure* scan_non_heap_roots,
4611 OopClosure* scan_non_heap_weak_roots,
4612 G1ParPushHeapRSClosure* scan_rs,
4613 CLDClosure* scan_strong_clds,
4614 CLDClosure* scan_weak_clds,
4615 CodeBlobClosure* scan_strong_code,
4616 uint worker_i) {
4617
4618 // First scan the shared roots.
4619 double ext_roots_start = os::elapsedTime();
4620 double closure_app_time_sec = 0.0;
4621
4622 bool during_im = _g1h->g1_policy()->during_initial_mark_pause();
4623 bool trace_metadata = during_im && ClassUnloadingWithConcurrentMark;
4624
4625 BufferingOopClosure buf_scan_non_heap_roots(scan_non_heap_roots);
4626 BufferingOopClosure buf_scan_non_heap_weak_roots(scan_non_heap_weak_roots);
4627
4628 process_roots(false, // no scoping; this is parallel code
4629 SharedHeap::SO_None,
4630 &buf_scan_non_heap_roots,
4631 &buf_scan_non_heap_weak_roots,
4632 scan_strong_clds,
|