393 if (!scan_in_progress()) return false; 394 395 { 396 MutexLockerEx x(RootRegionScan_lock, Mutex::_no_safepoint_check_flag); 397 while (scan_in_progress()) { 398 RootRegionScan_lock->wait(Mutex::_no_safepoint_check_flag); 399 } 400 } 401 return true; 402 } 403 404 #ifdef _MSC_VER // the use of 'this' below gets a warning, make it go away 405 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list 406 #endif // _MSC_VER 407 408 uint ConcurrentMark::scale_parallel_threads(uint n_par_threads) { 409 return MAX2((n_par_threads + 2) / 4, 1U); 410 } 411 412 ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) : 413 _markBitMap1(rs, MinObjAlignment - 1), 414 _markBitMap2(rs, MinObjAlignment - 1), 415 416 _parallel_marking_threads(0), 417 _max_parallel_marking_threads(0), 418 _sleep_factor(0.0), 419 _marking_task_overhead(1.0), 420 _cleanup_sleep_factor(0.0), 421 _cleanup_task_overhead(1.0), 422 _cleanup_list("Cleanup List"), 423 _region_bm((BitMap::idx_t) max_regions, false /* in_resource_area*/), 424 _card_bm((rs.size() + CardTableModRefBS::card_size - 1) >> 425 CardTableModRefBS::card_shift, 426 false /* in_resource_area*/), 427 428 _prevMarkBitMap(&_markBitMap1), 429 _nextMarkBitMap(&_markBitMap2), 430 431 _markStack(this), 432 // _finger set in set_non_marking_state 433 434 _max_task_num(MAX2((uint)ParallelGCThreads, 1U)), 435 // _active_tasks set in set_non_marking_state | 393 if (!scan_in_progress()) return false; 394 395 { 396 MutexLockerEx x(RootRegionScan_lock, Mutex::_no_safepoint_check_flag); 397 while (scan_in_progress()) { 398 RootRegionScan_lock->wait(Mutex::_no_safepoint_check_flag); 399 } 400 } 401 return true; 402 } 403 404 #ifdef _MSC_VER // the use of 'this' below gets a warning, make it go away 405 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list 406 #endif // _MSC_VER 407 408 uint ConcurrentMark::scale_parallel_threads(uint n_par_threads) { 409 return MAX2((n_par_threads + 2) / 4, 1U); 410 } 411 412 ConcurrentMark::ConcurrentMark(ReservedSpace rs, uint max_regions) : 413 _markBitMap1(rs, log2_intptr(MinObjAlignment)), 414 _markBitMap2(rs, log2_intptr(MinObjAlignment)), 415 _parallel_marking_threads(0), 416 _max_parallel_marking_threads(0), 417 _sleep_factor(0.0), 418 _marking_task_overhead(1.0), 419 _cleanup_sleep_factor(0.0), 420 _cleanup_task_overhead(1.0), 421 _cleanup_list("Cleanup List"), 422 _region_bm((BitMap::idx_t) max_regions, false /* in_resource_area*/), 423 _card_bm((rs.size() + CardTableModRefBS::card_size - 1) >> 424 CardTableModRefBS::card_shift, 425 false /* in_resource_area*/), 426 427 _prevMarkBitMap(&_markBitMap1), 428 _nextMarkBitMap(&_markBitMap2), 429 430 _markStack(this), 431 // _finger set in set_non_marking_state 432 433 _max_task_num(MAX2((uint)ParallelGCThreads, 1U)), 434 // _active_tasks set in set_non_marking_state |