376 delay_to_keep_mmu(policy, false /* cleanup */);
377 }
378
379 if (!_cm->has_aborted()) {
380 CMCleanup cl_cl(_cm);
381 VM_G1Concurrent op(&cl_cl, "Pause Cleanup");
382 VMThread::execute(&op);
383 }
384
385 // We now want to allow clearing of the marking bitmap to be
386 // suspended by a collection pause.
387 // We may have aborted just before the remark. Do not bother clearing the
388 // bitmap then, as it has been done during mark abort.
389 if (!_cm->has_aborted()) {
390 G1ConcPhase p(G1ConcurrentPhase::CLEANUP_FOR_NEXT_MARK, this);
391 _cm->cleanup_for_next_mark();
392 }
393 }
394
395 // Update the number of full collections that have been
396 // completed. This will also notify the FullGCCount_lock in case a
397 // Java thread is waiting for a full GC to happen (e.g., it
398 // called System.gc() with +ExplicitGCInvokesConcurrent).
399 {
400 SuspendibleThreadSetJoiner sts_join;
401 g1h->increment_old_marking_cycles_completed(true /* concurrent */);
402
403 _cm->concurrent_cycle_end();
404 }
405
406 cpmanager.set_phase(G1ConcurrentPhase::IDLE, _cm->has_aborted() /* force */);
407 }
408 _cm->root_regions()->cancel_scan();
409 }
410
411 void G1ConcurrentMarkThread::stop_service() {
412 MutexLocker ml(CGC_lock, Mutex::_no_safepoint_check_flag);
413 CGC_lock->notify_all();
414 }
415
416
|
376 delay_to_keep_mmu(policy, false /* cleanup */);
377 }
378
379 if (!_cm->has_aborted()) {
380 CMCleanup cl_cl(_cm);
381 VM_G1Concurrent op(&cl_cl, "Pause Cleanup");
382 VMThread::execute(&op);
383 }
384
385 // We now want to allow clearing of the marking bitmap to be
386 // suspended by a collection pause.
387 // We may have aborted just before the remark. Do not bother clearing the
388 // bitmap then, as it has been done during mark abort.
389 if (!_cm->has_aborted()) {
390 G1ConcPhase p(G1ConcurrentPhase::CLEANUP_FOR_NEXT_MARK, this);
391 _cm->cleanup_for_next_mark();
392 }
393 }
394
395 // Update the number of full collections that have been
396 // completed. This will also notify the G1FullGCCount_lock in case a
397 // Java thread is waiting for a full GC to happen (e.g., it
398 // called System.gc() with +ExplicitGCInvokesConcurrent).
399 {
400 SuspendibleThreadSetJoiner sts_join;
401 g1h->increment_old_marking_cycles_completed(true /* concurrent */);
402
403 _cm->concurrent_cycle_end();
404 }
405
406 cpmanager.set_phase(G1ConcurrentPhase::IDLE, _cm->has_aborted() /* force */);
407 }
408 _cm->root_regions()->cancel_scan();
409 }
410
411 void G1ConcurrentMarkThread::stop_service() {
412 MutexLocker ml(CGC_lock, Mutex::_no_safepoint_check_flag);
413 CGC_lock->notify_all();
414 }
415
416
|