203 }
204 }
205
206 void CMSHeap::stop() {
207 ConcurrentMarkSweepThread::cmst()->stop();
208 }
209
210 void CMSHeap::safepoint_synchronize_begin() {
211 ConcurrentMarkSweepThread::synchronize(false);
212 }
213
214 void CMSHeap::safepoint_synchronize_end() {
215 ConcurrentMarkSweepThread::desynchronize(false);
216 }
217
218 void CMSHeap::cms_process_roots(StrongRootsScope* scope,
219 bool young_gen_as_roots,
220 ScanningOption so,
221 bool only_strong_roots,
222 OopsInGenClosure* root_closure,
223 CLDClosure* cld_closure) {
224 MarkingCodeBlobClosure mark_code_closure(root_closure, !CodeBlobToOopClosure::FixRelocations);
225 CLDClosure* weak_cld_closure = only_strong_roots ? NULL : cld_closure;
226
227 process_roots(scope, so, root_closure, cld_closure, weak_cld_closure, &mark_code_closure);
228 if (!only_strong_roots) {
229 process_string_table_roots(scope, root_closure);
230 }
231
232 if (young_gen_as_roots &&
233 !_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) {
234 root_closure->set_generation(young_gen());
235 young_gen()->oop_iterate(root_closure);
236 root_closure->reset_generation();
237 }
238
239 _process_strong_tasks->all_tasks_completed(scope->n_threads());
240 }
241
242 void CMSHeap::gc_prologue(bool full) {
243 always_do_update_barrier = false;
244 GenCollectedHeap::gc_prologue(full);
245 };
246
247 void CMSHeap::gc_epilogue(bool full) {
248 GenCollectedHeap::gc_epilogue(full);
249 always_do_update_barrier = true;
|
203 }
204 }
205
206 void CMSHeap::stop() {
207 ConcurrentMarkSweepThread::cmst()->stop();
208 }
209
210 void CMSHeap::safepoint_synchronize_begin() {
211 ConcurrentMarkSweepThread::synchronize(false);
212 }
213
214 void CMSHeap::safepoint_synchronize_end() {
215 ConcurrentMarkSweepThread::desynchronize(false);
216 }
217
218 void CMSHeap::cms_process_roots(StrongRootsScope* scope,
219 bool young_gen_as_roots,
220 ScanningOption so,
221 bool only_strong_roots,
222 OopsInGenClosure* root_closure,
223 CLDClosure* cld_closure,
224 OopStorage::ParState<false, false>* par_state_string) {
225 MarkingCodeBlobClosure mark_code_closure(root_closure, !CodeBlobToOopClosure::FixRelocations);
226 CLDClosure* weak_cld_closure = only_strong_roots ? NULL : cld_closure;
227
228 process_roots(scope, so, root_closure, cld_closure, weak_cld_closure, &mark_code_closure);
229 if (!only_strong_roots) {
230 process_string_table_roots(scope, root_closure, par_state_string);
231 }
232
233 if (young_gen_as_roots &&
234 !_process_strong_tasks->is_task_claimed(GCH_PS_younger_gens)) {
235 root_closure->set_generation(young_gen());
236 young_gen()->oop_iterate(root_closure);
237 root_closure->reset_generation();
238 }
239
240 _process_strong_tasks->all_tasks_completed(scope->n_threads());
241 }
242
243 void CMSHeap::gc_prologue(bool full) {
244 always_do_update_barrier = false;
245 GenCollectedHeap::gc_prologue(full);
246 };
247
248 void CMSHeap::gc_epilogue(bool full) {
249 GenCollectedHeap::gc_epilogue(full);
250 always_do_update_barrier = true;
|