15 * 2 along with this work; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #include "precompiled.hpp"
25
26 #include "gc_implementation/shared/adaptiveSizePolicy.hpp"
27 #include "gc_implementation/shenandoah/shenandoahWorkerPolicy.hpp"
28 #include "runtime/thread.hpp"
29
30 uint ShenandoahWorkerPolicy::_prev_par_marking = 0;
31 uint ShenandoahWorkerPolicy::_prev_conc_marking = 0;
32 uint ShenandoahWorkerPolicy::_prev_conc_evac = 0;
33 uint ShenandoahWorkerPolicy::_prev_fullgc = 0;
34 uint ShenandoahWorkerPolicy::_prev_degengc = 0;
35 uint ShenandoahWorkerPolicy::_prev_conc_update_ref = 0;
36 uint ShenandoahWorkerPolicy::_prev_par_update_ref = 0;
37 uint ShenandoahWorkerPolicy::_prev_conc_cleanup = 0;
38 uint ShenandoahWorkerPolicy::_prev_conc_reset = 0;
39
40 uint ShenandoahWorkerPolicy::calc_workers_for_init_marking() {
41 uint active_workers = (_prev_par_marking == 0) ? ParallelGCThreads : _prev_par_marking;
42
43 _prev_par_marking =
44 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
45 active_workers,
46 Threads::number_of_non_daemon_threads());
47 return _prev_par_marking;
48 }
49
50 uint ShenandoahWorkerPolicy::calc_workers_for_conc_marking() {
51 uint active_workers = (_prev_conc_marking == 0) ? ConcGCThreads : _prev_conc_marking;
52 _prev_conc_marking =
53 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
54 active_workers,
62 }
63
64 // Calculate workers for concurrent evacuation (concurrent GC)
65 uint ShenandoahWorkerPolicy::calc_workers_for_conc_evac() {
66 uint active_workers = (_prev_conc_evac == 0) ? ConcGCThreads : _prev_conc_evac;
67 _prev_conc_evac =
68 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
69 active_workers,
70 Threads::number_of_non_daemon_threads());
71 return _prev_conc_evac;
72 }
73
74 // Calculate workers for parallel fullgc
75 uint ShenandoahWorkerPolicy::calc_workers_for_fullgc() {
76 uint active_workers = (_prev_fullgc == 0) ? ParallelGCThreads : _prev_fullgc;
77 _prev_fullgc =
78 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
79 active_workers,
80 Threads::number_of_non_daemon_threads());
81 return _prev_fullgc;
82 }
83
84 // Calculate workers for concurrent reference update
85 uint ShenandoahWorkerPolicy::calc_workers_for_conc_update_ref() {
86 uint active_workers = (_prev_conc_update_ref == 0) ? ConcGCThreads : _prev_conc_update_ref;
87 _prev_conc_update_ref =
88 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
89 active_workers,
90 Threads::number_of_non_daemon_threads());
91 return _prev_conc_update_ref;
92 }
93
94 // Calculate workers for parallel reference update
95 uint ShenandoahWorkerPolicy::calc_workers_for_final_update_ref() {
96 uint active_workers = (_prev_par_update_ref == 0) ? ParallelGCThreads : _prev_par_update_ref;
97 _prev_par_update_ref =
98 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
99 active_workers,
100 Threads::number_of_non_daemon_threads());
101 return _prev_par_update_ref;
|
15 * 2 along with this work; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
17 *
18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
19 * or visit www.oracle.com if you need additional information or have any
20 * questions.
21 *
22 */
23
24 #include "precompiled.hpp"
25
26 #include "gc_implementation/shared/adaptiveSizePolicy.hpp"
27 #include "gc_implementation/shenandoah/shenandoahWorkerPolicy.hpp"
28 #include "runtime/thread.hpp"
29
30 uint ShenandoahWorkerPolicy::_prev_par_marking = 0;
31 uint ShenandoahWorkerPolicy::_prev_conc_marking = 0;
32 uint ShenandoahWorkerPolicy::_prev_conc_evac = 0;
33 uint ShenandoahWorkerPolicy::_prev_fullgc = 0;
34 uint ShenandoahWorkerPolicy::_prev_degengc = 0;
35 uint ShenandoahWorkerPolicy::_prev_stw_traversal = 0;
36 uint ShenandoahWorkerPolicy::_prev_conc_traversal = 0;
37 uint ShenandoahWorkerPolicy::_prev_conc_update_ref = 0;
38 uint ShenandoahWorkerPolicy::_prev_par_update_ref = 0;
39 uint ShenandoahWorkerPolicy::_prev_conc_cleanup = 0;
40 uint ShenandoahWorkerPolicy::_prev_conc_reset = 0;
41
42 uint ShenandoahWorkerPolicy::calc_workers_for_init_marking() {
43 uint active_workers = (_prev_par_marking == 0) ? ParallelGCThreads : _prev_par_marking;
44
45 _prev_par_marking =
46 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
47 active_workers,
48 Threads::number_of_non_daemon_threads());
49 return _prev_par_marking;
50 }
51
52 uint ShenandoahWorkerPolicy::calc_workers_for_conc_marking() {
53 uint active_workers = (_prev_conc_marking == 0) ? ConcGCThreads : _prev_conc_marking;
54 _prev_conc_marking =
55 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
56 active_workers,
64 }
65
66 // Calculate workers for concurrent evacuation (concurrent GC)
67 uint ShenandoahWorkerPolicy::calc_workers_for_conc_evac() {
68 uint active_workers = (_prev_conc_evac == 0) ? ConcGCThreads : _prev_conc_evac;
69 _prev_conc_evac =
70 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
71 active_workers,
72 Threads::number_of_non_daemon_threads());
73 return _prev_conc_evac;
74 }
75
76 // Calculate workers for parallel fullgc
77 uint ShenandoahWorkerPolicy::calc_workers_for_fullgc() {
78 uint active_workers = (_prev_fullgc == 0) ? ParallelGCThreads : _prev_fullgc;
79 _prev_fullgc =
80 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
81 active_workers,
82 Threads::number_of_non_daemon_threads());
83 return _prev_fullgc;
84 }
85
86 // Calculate workers for Stop-the-world traversal GC
87 uint ShenandoahWorkerPolicy::calc_workers_for_stw_traversal() {
88 uint active_workers = (_prev_stw_traversal == 0) ? ParallelGCThreads : _prev_stw_traversal;
89 _prev_stw_traversal =
90 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
91 active_workers,
92 Threads::number_of_non_daemon_threads());
93 return _prev_stw_traversal;
94 }
95
96 // Calculate workers for concurent traversal GC
97 uint ShenandoahWorkerPolicy::calc_workers_for_conc_traversal() {
98 uint active_workers = (_prev_conc_traversal == 0) ? ConcGCThreads : _prev_conc_traversal;
99 _prev_conc_traversal =
100 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
101 active_workers,
102 Threads::number_of_non_daemon_threads());
103 return _prev_conc_traversal;
104 }
105
106 // Calculate workers for concurrent reference update
107 uint ShenandoahWorkerPolicy::calc_workers_for_conc_update_ref() {
108 uint active_workers = (_prev_conc_update_ref == 0) ? ConcGCThreads : _prev_conc_update_ref;
109 _prev_conc_update_ref =
110 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
111 active_workers,
112 Threads::number_of_non_daemon_threads());
113 return _prev_conc_update_ref;
114 }
115
116 // Calculate workers for parallel reference update
117 uint ShenandoahWorkerPolicy::calc_workers_for_final_update_ref() {
118 uint active_workers = (_prev_par_update_ref == 0) ? ParallelGCThreads : _prev_par_update_ref;
119 _prev_par_update_ref =
120 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
121 active_workers,
122 Threads::number_of_non_daemon_threads());
123 return _prev_par_update_ref;
|