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
|