612 FastScanClosure fsc_with_gc_barrier(this, true);
613
614 KlassScanClosure klass_scan_closure(&fsc_with_no_gc_barrier,
615 gch->rem_set()->klass_rem_set());
616 CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure,
617 &fsc_with_no_gc_barrier,
618 false);
619
620 set_promo_failure_scan_stack_closure(&fsc_with_no_gc_barrier);
621 FastEvacuateFollowersClosure evacuate_followers(gch, _level, this,
622 &fsc_with_no_gc_barrier,
623 &fsc_with_gc_barrier);
624
625 assert(gch->no_allocs_since_save_marks(0),
626 "save marks have not been newly set.");
627
628 gch->gen_process_roots(_level,
629 true, // Process younger gens, if any,
630 // as strong roots.
631 true, // activate StrongRootsScope
632 SharedHeap::SO_ScavengeCodeCache,
633 GenCollectedHeap::StrongAndWeakRoots,
634 &fsc_with_no_gc_barrier,
635 &fsc_with_gc_barrier,
636 &cld_scan_closure);
637
638 // "evacuate followers".
639 evacuate_followers.do_void();
640
641 FastKeepAliveClosure keep_alive(this, &scan_weak_ref);
642 ReferenceProcessor* rp = ref_processor();
643 rp->setup_policy(clear_all_soft_refs);
644 const ReferenceProcessorStats& stats =
645 rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers,
646 NULL, _gc_timer, gc_tracer.gc_id());
647 gc_tracer.report_gc_reference_stats(stats);
648
649 if (!_promotion_failed) {
650 // Swap the survivor spaces.
651 eden()->clear(SpaceDecorator::Mangle);
652 from()->clear(SpaceDecorator::Mangle);
|
612 FastScanClosure fsc_with_gc_barrier(this, true);
613
614 KlassScanClosure klass_scan_closure(&fsc_with_no_gc_barrier,
615 gch->rem_set()->klass_rem_set());
616 CLDToKlassAndOopClosure cld_scan_closure(&klass_scan_closure,
617 &fsc_with_no_gc_barrier,
618 false);
619
620 set_promo_failure_scan_stack_closure(&fsc_with_no_gc_barrier);
621 FastEvacuateFollowersClosure evacuate_followers(gch, _level, this,
622 &fsc_with_no_gc_barrier,
623 &fsc_with_gc_barrier);
624
625 assert(gch->no_allocs_since_save_marks(0),
626 "save marks have not been newly set.");
627
628 gch->gen_process_roots(_level,
629 true, // Process younger gens, if any,
630 // as strong roots.
631 true, // activate StrongRootsScope
632 GenCollectedHeap::SO_ScavengeCodeCache,
633 GenCollectedHeap::StrongAndWeakRoots,
634 &fsc_with_no_gc_barrier,
635 &fsc_with_gc_barrier,
636 &cld_scan_closure);
637
638 // "evacuate followers".
639 evacuate_followers.do_void();
640
641 FastKeepAliveClosure keep_alive(this, &scan_weak_ref);
642 ReferenceProcessor* rp = ref_processor();
643 rp->setup_policy(clear_all_soft_refs);
644 const ReferenceProcessorStats& stats =
645 rp->process_discovered_references(&is_alive, &keep_alive, &evacuate_followers,
646 NULL, _gc_timer, gc_tracer.gc_id());
647 gc_tracer.report_gc_reference_stats(stats);
648
649 if (!_promotion_failed) {
650 // Swap the survivor spaces.
651 eden()->clear(SpaceDecorator::Mangle);
652 from()->clear(SpaceDecorator::Mangle);
|