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