`G1ConcurrentMark::_num_concurrent_workers` tracks the actual num of threads used for conc-marking, but can fail to do so due to potential failure in `set_active_workers`.
The use in `scan_root_regions` should probably be replaced with the max value, because scanning-root-regions are not "interruptible" -- can't abort in the middle. `calc_active_marking_workers()` is a good trade-off on balancing both mutator/gc progressing, but not necessarily suitable for scan-root-regions.
The use in `scan_root_regions` should probably be replaced with the max value, because scanning-root-regions are not "interruptible" -- can't abort in the middle. `calc_active_marking_workers()` is a good trade-off on balancing both mutator/gc progressing, but not necessarily suitable for scan-root-regions.