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