8080837: Move number of workers calculation out of CollectionSetChooser::prepare_for_par_region_addition
Reviewed-by: kbarrett, mgerdin
--- a/hotspot/src/share/vm/gc/g1/collectionSetChooser.cpp Thu May 21 14:10:15 2015 +0200
+++ b/hotspot/src/share/vm/gc/g1/collectionSetChooser.cpp Fri May 22 10:57:53 2015 +0200
@@ -158,20 +158,10 @@
hr->calc_gc_efficiency();
}
-void CollectionSetChooser::prepare_for_par_region_addition(uint n_regions,
+void CollectionSetChooser::prepare_for_par_region_addition(uint n_threads,
+ uint n_regions,
uint chunk_size) {
_first_par_unreserved_idx = 0;
- uint n_threads = (uint) ParallelGCThreads;
- if (UseDynamicNumberOfGCThreads) {
- assert(G1CollectedHeap::heap()->workers()->active_workers() > 0,
- "Should have been set earlier");
- // This is defensive code. As the assertion above says, the number
- // of active threads should be > 0, but in case there is some path
- // or some improperly initialized variable with leads to no
- // active threads, protect against that in a product build.
- n_threads = MAX2(G1CollectedHeap::heap()->workers()->active_workers(),
- 1U);
- }
uint max_waste = n_threads * chunk_size;
// it should be aligned with respect to chunk_size
uint aligned_n_regions = (n_regions + chunk_size - 1) / chunk_size * chunk_size;
--- a/hotspot/src/share/vm/gc/g1/collectionSetChooser.hpp Thu May 21 14:10:15 2015 +0200
+++ b/hotspot/src/share/vm/gc/g1/collectionSetChooser.hpp Fri May 22 10:57:53 2015 +0200
@@ -121,7 +121,7 @@
// Must be called before calls to claim_array_chunk().
// n_regions is the number of regions, chunk_size the chunk size.
- void prepare_for_par_region_addition(uint n_regions, uint chunk_size);
+ void prepare_for_par_region_addition(uint n_threads, uint n_regions, uint chunk_size);
// Returns the first index in a contiguous chunk of chunk_size indexes
// that the calling thread has reserved. These must be set by the
// calling thread using set_region() (to NULL if necessary).
--- a/hotspot/src/share/vm/gc/g1/concurrentMark.cpp Thu May 21 14:10:15 2015 +0200
+++ b/hotspot/src/share/vm/gc/g1/concurrentMark.cpp Fri May 22 10:57:53 2015 +0200
@@ -2007,7 +2007,7 @@
// this will also free any regions totally full of garbage objects,
// and sort the regions.
- g1h->g1_policy()->record_concurrent_mark_cleanup_end((int)n_workers);
+ g1h->g1_policy()->record_concurrent_mark_cleanup_end();
// Statistics.
double end = os::elapsedTime();
--- a/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.cpp Thu May 21 14:10:15 2015 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.cpp Fri May 22 10:57:53 2015 +0200
@@ -1587,14 +1587,17 @@
}
void
-G1CollectorPolicy::record_concurrent_mark_cleanup_end(uint n_workers) {
+G1CollectorPolicy::record_concurrent_mark_cleanup_end() {
_collectionSetChooser->clear();
+ FlexibleWorkGang* workers = _g1->workers();
+ uint n_workers = workers->active_workers();
+
uint n_regions = _g1->num_regions();
uint chunk_size = calculate_parallel_work_chunk_size(n_workers, n_regions);
- _collectionSetChooser->prepare_for_par_region_addition(n_regions, chunk_size);
+ _collectionSetChooser->prepare_for_par_region_addition(n_workers, n_regions, chunk_size);
ParKnownGarbageTask par_known_garbage_task(_collectionSetChooser, chunk_size, n_workers);
- _g1->workers()->run_task(&par_known_garbage_task);
+ workers->run_task(&par_known_garbage_task);
_collectionSetChooser->sort_regions();
--- a/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.hpp Thu May 21 14:10:15 2015 +0200
+++ b/hotspot/src/share/vm/gc/g1/g1CollectorPolicy.hpp Fri May 22 10:57:53 2015 +0200
@@ -692,7 +692,7 @@
// Record start, end, and completion of cleanup.
void record_concurrent_mark_cleanup_start();
- void record_concurrent_mark_cleanup_end(uint n_workers);
+ void record_concurrent_mark_cleanup_end();
void record_concurrent_mark_cleanup_completed();
// Records the information about the heap size for reporting in