OpenJDK / valhalla / valhalla10-old / hotspot
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