437
438 {
439 MutexLockerEx x(RootRegionScan_lock, Mutex::_no_safepoint_check_flag);
440 _scan_in_progress = false;
441 RootRegionScan_lock->notify_all();
442 }
443 }
444
445 bool CMRootRegions::wait_until_scan_finished() {
446 if (!scan_in_progress()) return false;
447
448 {
449 MutexLockerEx x(RootRegionScan_lock, Mutex::_no_safepoint_check_flag);
450 while (scan_in_progress()) {
451 RootRegionScan_lock->wait(Mutex::_no_safepoint_check_flag);
452 }
453 }
454 return true;
455 }
456
457 #ifdef _MSC_VER // the use of 'this' below gets a warning, make it go away
458 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list
459 #endif // _MSC_VER
460
461 uint ConcurrentMark::scale_parallel_threads(uint n_par_threads) {
462 return MAX2((n_par_threads + 2) / 4, 1U);
463 }
464
465 ConcurrentMark::ConcurrentMark(G1CollectedHeap* g1h, G1RegionToSpaceMapper* prev_bitmap_storage, G1RegionToSpaceMapper* next_bitmap_storage) :
466 _g1h(g1h),
467 _markBitMap1(),
468 _markBitMap2(),
469 _parallel_marking_threads(0),
470 _max_parallel_marking_threads(0),
471 _sleep_factor(0.0),
472 _marking_task_overhead(1.0),
473 _cleanup_sleep_factor(0.0),
474 _cleanup_task_overhead(1.0),
475 _cleanup_list("Cleanup List"),
476 _region_bm((BitMap::idx_t)(g1h->max_regions()), false /* in_resource_area*/),
477 _card_bm((g1h->reserved_region().byte_size() + CardTableModRefBS::card_size - 1) >>
478 CardTableModRefBS::card_shift,
479 false /* in_resource_area*/),
480
|
437
438 {
439 MutexLockerEx x(RootRegionScan_lock, Mutex::_no_safepoint_check_flag);
440 _scan_in_progress = false;
441 RootRegionScan_lock->notify_all();
442 }
443 }
444
445 bool CMRootRegions::wait_until_scan_finished() {
446 if (!scan_in_progress()) return false;
447
448 {
449 MutexLockerEx x(RootRegionScan_lock, Mutex::_no_safepoint_check_flag);
450 while (scan_in_progress()) {
451 RootRegionScan_lock->wait(Mutex::_no_safepoint_check_flag);
452 }
453 }
454 return true;
455 }
456
457 uint ConcurrentMark::scale_parallel_threads(uint n_par_threads) {
458 return MAX2((n_par_threads + 2) / 4, 1U);
459 }
460
461 ConcurrentMark::ConcurrentMark(G1CollectedHeap* g1h, G1RegionToSpaceMapper* prev_bitmap_storage, G1RegionToSpaceMapper* next_bitmap_storage) :
462 _g1h(g1h),
463 _markBitMap1(),
464 _markBitMap2(),
465 _parallel_marking_threads(0),
466 _max_parallel_marking_threads(0),
467 _sleep_factor(0.0),
468 _marking_task_overhead(1.0),
469 _cleanup_sleep_factor(0.0),
470 _cleanup_task_overhead(1.0),
471 _cleanup_list("Cleanup List"),
472 _region_bm((BitMap::idx_t)(g1h->max_regions()), false /* in_resource_area*/),
473 _card_bm((g1h->reserved_region().byte_size() + CardTableModRefBS::card_size - 1) >>
474 CardTableModRefBS::card_shift,
475 false /* in_resource_area*/),
476
|