changeset 8446:824abbd9bbf9

8080837: Move number of workers calculation out of CollectionSetChooser::prepare_for_par_region_addition Reviewed-by: kbarrett, mgerdin
author stefank
date Fri, 22 May 2015 10:57:53 +0200
parents a20b51d96bf3
children 5d337610d914
files src/share/vm/gc/g1/collectionSetChooser.cpp src/share/vm/gc/g1/collectionSetChooser.hpp src/share/vm/gc/g1/concurrentMark.cpp src/share/vm/gc/g1/g1CollectorPolicy.cpp src/share/vm/gc/g1/g1CollectorPolicy.hpp
diffstat 5 files changed, 11 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/gc/g1/collectionSetChooser.cpp	Thu May 21 14:10:15 2015 +0200
+++ b/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/src/share/vm/gc/g1/collectionSetChooser.hpp	Thu May 21 14:10:15 2015 +0200
+++ b/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/src/share/vm/gc/g1/concurrentMark.cpp	Thu May 21 14:10:15 2015 +0200
+++ b/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/src/share/vm/gc/g1/g1CollectorPolicy.cpp	Thu May 21 14:10:15 2015 +0200
+++ b/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/src/share/vm/gc/g1/g1CollectorPolicy.hpp	Thu May 21 14:10:15 2015 +0200
+++ b/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