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/shared/adaptiveSizePolicy.hpp"
27 #include "gc/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_partial = 0;
36 uint ShenandoahWorkerPolicy::_prev_conc_partial = 0;
37 uint ShenandoahWorkerPolicy::_prev_stw_traversal = 0;
38 uint ShenandoahWorkerPolicy::_prev_conc_traversal = 0;
39 uint ShenandoahWorkerPolicy::_prev_conc_update_ref = 0;
40 uint ShenandoahWorkerPolicy::_prev_par_update_ref = 0;
41 uint ShenandoahWorkerPolicy::_prev_conc_cleanup = 0;
42
43 uint ShenandoahWorkerPolicy::calc_workers_for_init_marking() {
44 uint active_workers = (_prev_par_marking == 0) ? ParallelGCThreads : _prev_par_marking;
45
46 _prev_par_marking =
47 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
48 active_workers,
49 Threads::number_of_non_daemon_threads());
50 return _prev_par_marking;
51 }
52
53 uint ShenandoahWorkerPolicy::calc_workers_for_conc_marking() {
54 uint active_workers = (_prev_conc_marking == 0) ? ConcGCThreads : _prev_conc_marking;
55 _prev_conc_marking =
56 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
75 }
76
77 // Calculate workers for parallel fullgc
78 uint ShenandoahWorkerPolicy::calc_workers_for_fullgc() {
79 uint active_workers = (_prev_fullgc == 0) ? ParallelGCThreads : _prev_fullgc;
80 _prev_fullgc =
81 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
82 active_workers,
83 Threads::number_of_non_daemon_threads());
84 return _prev_fullgc;
85 }
86
87 // Calculate workers for parallel degenerated gc
88 uint ShenandoahWorkerPolicy::calc_workers_for_stw_degenerated() {
89 uint active_workers = (_prev_degengc == 0) ? ParallelGCThreads : _prev_degengc;
90 _prev_degengc =
91 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
92 active_workers,
93 Threads::number_of_non_daemon_threads());
94 return _prev_degengc;
95 }
96
97 // Calculate workers for Stop-the-world partial GC
98 uint ShenandoahWorkerPolicy::calc_workers_for_stw_partial() {
99 uint active_workers = (_prev_stw_partial == 0) ? ParallelGCThreads : _prev_stw_partial;
100 _prev_stw_partial =
101 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
102 active_workers,
103 Threads::number_of_non_daemon_threads());
104 return _prev_stw_partial;
105 }
106
107 // Calculate workers for concurent partial GC
108 uint ShenandoahWorkerPolicy::calc_workers_for_conc_partial() {
109 uint active_workers = (_prev_conc_partial == 0) ? ConcGCThreads : _prev_conc_partial;
110 _prev_conc_partial =
111 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
112 active_workers,
113 Threads::number_of_non_daemon_threads());
114 return _prev_conc_partial;
115 }
116
117 // Calculate workers for Stop-the-world traversal GC
118 uint ShenandoahWorkerPolicy::calc_workers_for_stw_traversal() {
119 uint active_workers = (_prev_stw_traversal == 0) ? ParallelGCThreads : _prev_stw_traversal;
120 _prev_stw_traversal =
121 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
122 active_workers,
123 Threads::number_of_non_daemon_threads());
124 return _prev_stw_traversal;
125 }
126
127 // Calculate workers for concurent traversal GC
128 uint ShenandoahWorkerPolicy::calc_workers_for_conc_traversal() {
129 uint active_workers = (_prev_conc_traversal == 0) ? ConcGCThreads : _prev_conc_traversal;
130 _prev_conc_traversal =
131 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
132 active_workers,
133 Threads::number_of_non_daemon_threads());
134 return _prev_conc_traversal;
|
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/shared/adaptiveSizePolicy.hpp"
27 #include "gc/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
41 uint ShenandoahWorkerPolicy::calc_workers_for_init_marking() {
42 uint active_workers = (_prev_par_marking == 0) ? ParallelGCThreads : _prev_par_marking;
43
44 _prev_par_marking =
45 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
46 active_workers,
47 Threads::number_of_non_daemon_threads());
48 return _prev_par_marking;
49 }
50
51 uint ShenandoahWorkerPolicy::calc_workers_for_conc_marking() {
52 uint active_workers = (_prev_conc_marking == 0) ? ConcGCThreads : _prev_conc_marking;
53 _prev_conc_marking =
54 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
73 }
74
75 // Calculate workers for parallel fullgc
76 uint ShenandoahWorkerPolicy::calc_workers_for_fullgc() {
77 uint active_workers = (_prev_fullgc == 0) ? ParallelGCThreads : _prev_fullgc;
78 _prev_fullgc =
79 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
80 active_workers,
81 Threads::number_of_non_daemon_threads());
82 return _prev_fullgc;
83 }
84
85 // Calculate workers for parallel degenerated gc
86 uint ShenandoahWorkerPolicy::calc_workers_for_stw_degenerated() {
87 uint active_workers = (_prev_degengc == 0) ? ParallelGCThreads : _prev_degengc;
88 _prev_degengc =
89 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
90 active_workers,
91 Threads::number_of_non_daemon_threads());
92 return _prev_degengc;
93 }
94
95 // Calculate workers for Stop-the-world traversal GC
96 uint ShenandoahWorkerPolicy::calc_workers_for_stw_traversal() {
97 uint active_workers = (_prev_stw_traversal == 0) ? ParallelGCThreads : _prev_stw_traversal;
98 _prev_stw_traversal =
99 AdaptiveSizePolicy::calc_active_workers(ParallelGCThreads,
100 active_workers,
101 Threads::number_of_non_daemon_threads());
102 return _prev_stw_traversal;
103 }
104
105 // Calculate workers for concurent traversal GC
106 uint ShenandoahWorkerPolicy::calc_workers_for_conc_traversal() {
107 uint active_workers = (_prev_conc_traversal == 0) ? ConcGCThreads : _prev_conc_traversal;
108 _prev_conc_traversal =
109 AdaptiveSizePolicy::calc_active_conc_workers(ConcGCThreads,
110 active_workers,
111 Threads::number_of_non_daemon_threads());
112 return _prev_conc_traversal;
|