< prev index next >

src/share/vm/memory/defNewGeneration.cpp

Print this page




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


< prev index next >