< prev index next >

src/share/vm/gc/g1/g1MarkSweep.cpp

Print this page
rev 13331 : imported patch webrev.3b
rev 13332 : [mq]: webrev.4


 132     if (ClassUnloading) {
 133       root_processor.process_strong_roots(&GenMarkSweep::follow_root_closure,
 134                                           &GenMarkSweep::follow_cld_closure,
 135                                           &follow_code_closure);
 136     } else {
 137       root_processor.process_all_roots_no_string_table(
 138                                           &GenMarkSweep::follow_root_closure,
 139                                           &GenMarkSweep::follow_cld_closure,
 140                                           &follow_code_closure);
 141     }
 142   }
 143 
 144   {
 145     GCTraceTime(Debug, gc, phases) trace("Reference Processing", gc_timer());
 146 
 147     // Process reference objects found during marking
 148     ReferenceProcessor* rp = GenMarkSweep::ref_processor();
 149     assert(rp == g1h->ref_processor_stw(), "Sanity");
 150 
 151     rp->setup_policy(clear_all_softrefs);
 152     ReferenceProcessorPhaseTimes pt(gc_timer(), rp->num_q(), rp->processing_is_mt());
 153 
 154     const ReferenceProcessorStats& stats =
 155         rp->process_discovered_references(&GenMarkSweep::is_alive,
 156                                           &GenMarkSweep::keep_alive,
 157                                           &GenMarkSweep::follow_stack_closure,
 158                                           NULL,
 159                                           &pt);
 160     gc_tracer()->report_gc_reference_stats(stats);
 161     pt.print_all_references();
 162   }
 163 
 164   // This is the point where the entire marking should have completed.
 165   assert(GenMarkSweep::_marking_stack.is_empty(), "Marking should have completed");
 166 
 167   if (ClassUnloading) {
 168     GCTraceTime(Debug, gc, phases) trace("Class Unloading", gc_timer());
 169 
 170     // Unload classes and purge the SystemDictionary.
 171     bool purged_class = SystemDictionary::do_unloading(&GenMarkSweep::is_alive, gc_timer());
 172 




 132     if (ClassUnloading) {
 133       root_processor.process_strong_roots(&GenMarkSweep::follow_root_closure,
 134                                           &GenMarkSweep::follow_cld_closure,
 135                                           &follow_code_closure);
 136     } else {
 137       root_processor.process_all_roots_no_string_table(
 138                                           &GenMarkSweep::follow_root_closure,
 139                                           &GenMarkSweep::follow_cld_closure,
 140                                           &follow_code_closure);
 141     }
 142   }
 143 
 144   {
 145     GCTraceTime(Debug, gc, phases) trace("Reference Processing", gc_timer());
 146 
 147     // Process reference objects found during marking
 148     ReferenceProcessor* rp = GenMarkSweep::ref_processor();
 149     assert(rp == g1h->ref_processor_stw(), "Sanity");
 150 
 151     rp->setup_policy(clear_all_softrefs);
 152     ReferenceProcessorPhaseTimes pt(gc_timer(), rp->num_q());
 153 
 154     const ReferenceProcessorStats& stats =
 155         rp->process_discovered_references(&GenMarkSweep::is_alive,
 156                                           &GenMarkSweep::keep_alive,
 157                                           &GenMarkSweep::follow_stack_closure,
 158                                           NULL,
 159                                           &pt);
 160     gc_tracer()->report_gc_reference_stats(stats);
 161     pt.print_all_references();
 162   }
 163 
 164   // This is the point where the entire marking should have completed.
 165   assert(GenMarkSweep::_marking_stack.is_empty(), "Marking should have completed");
 166 
 167   if (ClassUnloading) {
 168     GCTraceTime(Debug, gc, phases) trace("Class Unloading", gc_timer());
 169 
 170     // Unload classes and purge the SystemDictionary.
 171     bool purged_class = SystemDictionary::do_unloading(&GenMarkSweep::is_alive, gc_timer());
 172 


< prev index next >