< prev index next >

src/share/vm/memory/defNewGeneration.cpp

Print this page
rev 7994 : Move remaining root processing to GenCollectedHeap


 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);


< prev index next >