< prev index next >

src/share/vm/memory/defNewGeneration.cpp

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


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


< prev index next >