< prev index next >

src/share/vm/gc_implementation/shenandoah/shenandoahWorkerPolicy.cpp

Print this page
rev 11463 : Backport Traversal GC


  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;


< prev index next >