1 /*
   2  * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "incls/_precompiled.incl"
  26 #include "incls/_g1CollectorPolicy.cpp.incl"
  27 
  28 #define PREDICTIONS_VERBOSE 0
  29 
  30 // <NEW PREDICTION>
  31 
  32 // Different defaults for different number of GC threads
  33 // They were chosen by running GCOld and SPECjbb on debris with different
  34 //   numbers of GC threads and choosing them based on the results
  35 
  36 // all the same
  37 static double rs_length_diff_defaults[] = {
  38   0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
  39 };
  40 
  41 static double cost_per_card_ms_defaults[] = {
  42   0.01, 0.005, 0.005, 0.003, 0.003, 0.002, 0.002, 0.0015
  43 };
  44 
  45 // all the same
  46 static double fully_young_cards_per_entry_ratio_defaults[] = {
  47   1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
  48 };
  49 
  50 static double cost_per_entry_ms_defaults[] = {
  51   0.015, 0.01, 0.01, 0.008, 0.008, 0.0055, 0.0055, 0.005
  52 };
  53 
  54 static double cost_per_byte_ms_defaults[] = {
  55   0.00006, 0.00003, 0.00003, 0.000015, 0.000015, 0.00001, 0.00001, 0.000009
  56 };
  57 
  58 // these should be pretty consistent
  59 static double constant_other_time_ms_defaults[] = {
  60   5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0
  61 };
  62 
  63 
  64 static double young_other_cost_per_region_ms_defaults[] = {
  65   0.3, 0.2, 0.2, 0.15, 0.15, 0.12, 0.12, 0.1
  66 };
  67 
  68 static double non_young_other_cost_per_region_ms_defaults[] = {
  69   1.0, 0.7, 0.7, 0.5, 0.5, 0.42, 0.42, 0.30
  70 };
  71 
  72 // </NEW PREDICTION>
  73 
  74 G1CollectorPolicy::G1CollectorPolicy() :
  75   _parallel_gc_threads((ParallelGCThreads > 0) ? ParallelGCThreads : 1),
  76   _n_pauses(0),
  77   _recent_CH_strong_roots_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
  78   _recent_G1_strong_roots_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
  79   _recent_evac_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
  80   _recent_pause_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
  81   _recent_rs_sizes(new TruncatedSeq(NumPrevPausesForHeuristics)),
  82   _recent_gc_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
  83   _all_pause_times_ms(new NumberSeq()),
  84   _stop_world_start(0.0),
  85   _all_stop_world_times_ms(new NumberSeq()),
  86   _all_yield_times_ms(new NumberSeq()),
  87 
  88   _all_mod_union_times_ms(new NumberSeq()),
  89 
  90   _summary(new Summary()),
  91 
  92 #ifndef PRODUCT
  93   _cur_clear_ct_time_ms(0.0),
  94   _min_clear_cc_time_ms(-1.0),
  95   _max_clear_cc_time_ms(-1.0),
  96   _cur_clear_cc_time_ms(0.0),
  97   _cum_clear_cc_time_ms(0.0),
  98   _num_cc_clears(0L),
  99 #endif
 100 
 101   _region_num_young(0),
 102   _region_num_tenured(0),
 103   _prev_region_num_young(0),
 104   _prev_region_num_tenured(0),
 105 
 106   _aux_num(10),
 107   _all_aux_times_ms(new NumberSeq[_aux_num]),
 108   _cur_aux_start_times_ms(new double[_aux_num]),
 109   _cur_aux_times_ms(new double[_aux_num]),
 110   _cur_aux_times_set(new bool[_aux_num]),
 111 
 112   _concurrent_mark_init_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
 113   _concurrent_mark_remark_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
 114   _concurrent_mark_cleanup_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
 115 
 116   // <NEW PREDICTION>
 117 
 118   _alloc_rate_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
 119   _prev_collection_pause_end_ms(0.0),
 120   _pending_card_diff_seq(new TruncatedSeq(TruncatedSeqLength)),
 121   _rs_length_diff_seq(new TruncatedSeq(TruncatedSeqLength)),
 122   _cost_per_card_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
 123   _fully_young_cards_per_entry_ratio_seq(new TruncatedSeq(TruncatedSeqLength)),
 124   _partially_young_cards_per_entry_ratio_seq(
 125                                          new TruncatedSeq(TruncatedSeqLength)),
 126   _cost_per_entry_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
 127   _partially_young_cost_per_entry_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
 128   _cost_per_byte_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
 129   _cost_per_byte_ms_during_cm_seq(new TruncatedSeq(TruncatedSeqLength)),
 130   _constant_other_time_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
 131   _young_other_cost_per_region_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
 132   _non_young_other_cost_per_region_ms_seq(
 133                                          new TruncatedSeq(TruncatedSeqLength)),
 134 
 135   _pending_cards_seq(new TruncatedSeq(TruncatedSeqLength)),
 136   _scanned_cards_seq(new TruncatedSeq(TruncatedSeqLength)),
 137   _rs_lengths_seq(new TruncatedSeq(TruncatedSeqLength)),
 138 
 139   _pause_time_target_ms((double) MaxGCPauseMillis),
 140 
 141   // </NEW PREDICTION>
 142 
 143   _in_young_gc_mode(false),
 144   _full_young_gcs(true),
 145   _full_young_pause_num(0),
 146   _partial_young_pause_num(0),
 147 
 148   _during_marking(false),
 149   _in_marking_window(false),
 150   _in_marking_window_im(false),
 151 
 152   _known_garbage_ratio(0.0),
 153   _known_garbage_bytes(0),
 154 
 155   _young_gc_eff_seq(new TruncatedSeq(TruncatedSeqLength)),
 156 
 157    _recent_prev_end_times_for_all_gcs_sec(new TruncatedSeq(NumPrevPausesForHeuristics)),
 158 
 159   _recent_CS_bytes_used_before(new TruncatedSeq(NumPrevPausesForHeuristics)),
 160   _recent_CS_bytes_surviving(new TruncatedSeq(NumPrevPausesForHeuristics)),
 161 
 162   _recent_avg_pause_time_ratio(0.0),
 163   _num_markings(0),
 164   _n_marks(0),
 165   _n_pauses_at_mark_end(0),
 166 
 167   _all_full_gc_times_ms(new NumberSeq()),
 168 
 169   // G1PausesBtwnConcMark defaults to -1
 170   // so the hack is to do the cast  QQQ FIXME
 171   _pauses_btwn_concurrent_mark((size_t)G1PausesBtwnConcMark),
 172   _n_marks_since_last_pause(0),
 173   _initiate_conc_mark_if_possible(false),
 174   _during_initial_mark_pause(false),
 175   _should_revert_to_full_young_gcs(false),
 176   _last_full_young_gc(false),
 177 
 178   _prev_collection_pause_used_at_end_bytes(0),
 179 
 180   _collection_set(NULL),
 181   _collection_set_size(0),
 182   _collection_set_bytes_used_before(0),
 183 
 184   // Incremental CSet attributes
 185   _inc_cset_build_state(Inactive),
 186   _inc_cset_head(NULL),
 187   _inc_cset_tail(NULL),
 188   _inc_cset_size(0),
 189   _inc_cset_young_index(0),
 190   _inc_cset_bytes_used_before(0),
 191   _inc_cset_max_finger(NULL),
 192   _inc_cset_recorded_young_bytes(0),
 193   _inc_cset_recorded_rs_lengths(0),
 194   _inc_cset_predicted_elapsed_time_ms(0.0),
 195   _inc_cset_predicted_bytes_to_copy(0),
 196 
 197 #ifdef _MSC_VER // the use of 'this' below gets a warning, make it go away
 198 #pragma warning( disable:4355 ) // 'this' : used in base member initializer list
 199 #endif // _MSC_VER
 200 
 201   _short_lived_surv_rate_group(new SurvRateGroup(this, "Short Lived",
 202                                                  G1YoungSurvRateNumRegionsSummary)),
 203   _survivor_surv_rate_group(new SurvRateGroup(this, "Survivor",
 204                                               G1YoungSurvRateNumRegionsSummary)),
 205   // add here any more surv rate groups
 206   _recorded_survivor_regions(0),
 207   _recorded_survivor_head(NULL),
 208   _recorded_survivor_tail(NULL),
 209   _survivors_age_table(true),
 210 
 211   _gc_overhead_perc(0.0)
 212 
 213 {
 214   // Set up the region size and associated fields. Given that the
 215   // policy is created before the heap, we have to set this up here,
 216   // so it's done as soon as possible.
 217   HeapRegion::setup_heap_region_size(Arguments::min_heap_size());
 218   HeapRegionRemSet::setup_remset_size();
 219 
 220   // Verify PLAB sizes
 221   const uint region_size = HeapRegion::GrainWords;
 222   if (YoungPLABSize > region_size || OldPLABSize > region_size) {
 223     char buffer[128];
 224     jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most %u",
 225                  OldPLABSize > region_size ? "Old" : "Young", region_size);
 226     vm_exit_during_initialization(buffer);
 227   }
 228 
 229   _recent_prev_end_times_for_all_gcs_sec->add(os::elapsedTime());
 230   _prev_collection_pause_end_ms = os::elapsedTime() * 1000.0;
 231 
 232   _par_last_gc_worker_start_times_ms = new double[_parallel_gc_threads];
 233   _par_last_ext_root_scan_times_ms = new double[_parallel_gc_threads];
 234   _par_last_mark_stack_scan_times_ms = new double[_parallel_gc_threads];
 235 
 236   _par_last_update_rs_times_ms = new double[_parallel_gc_threads];
 237   _par_last_update_rs_processed_buffers = new double[_parallel_gc_threads];
 238 
 239   _par_last_scan_rs_times_ms = new double[_parallel_gc_threads];
 240 
 241   _par_last_obj_copy_times_ms = new double[_parallel_gc_threads];
 242 
 243   _par_last_termination_times_ms = new double[_parallel_gc_threads];
 244   _par_last_termination_attempts = new double[_parallel_gc_threads];
 245   _par_last_gc_worker_end_times_ms = new double[_parallel_gc_threads];
 246 
 247   // start conservatively
 248   _expensive_region_limit_ms = 0.5 * (double) MaxGCPauseMillis;
 249 
 250   // <NEW PREDICTION>
 251 
 252   int index;
 253   if (ParallelGCThreads == 0)
 254     index = 0;
 255   else if (ParallelGCThreads > 8)
 256     index = 7;
 257   else
 258     index = ParallelGCThreads - 1;
 259 
 260   _pending_card_diff_seq->add(0.0);
 261   _rs_length_diff_seq->add(rs_length_diff_defaults[index]);
 262   _cost_per_card_ms_seq->add(cost_per_card_ms_defaults[index]);
 263   _fully_young_cards_per_entry_ratio_seq->add(
 264                             fully_young_cards_per_entry_ratio_defaults[index]);
 265   _cost_per_entry_ms_seq->add(cost_per_entry_ms_defaults[index]);
 266   _cost_per_byte_ms_seq->add(cost_per_byte_ms_defaults[index]);
 267   _constant_other_time_ms_seq->add(constant_other_time_ms_defaults[index]);
 268   _young_other_cost_per_region_ms_seq->add(
 269                                young_other_cost_per_region_ms_defaults[index]);
 270   _non_young_other_cost_per_region_ms_seq->add(
 271                            non_young_other_cost_per_region_ms_defaults[index]);
 272 
 273   // </NEW PREDICTION>
 274 
 275   // Below, we might need to calculate the pause time target based on
 276   // the pause interval. When we do so we are going to give G1 maximum
 277   // flexibility and allow it to do pauses when it needs to. So, we'll
 278   // arrange that the pause interval to be pause time target + 1 to
 279   // ensure that a) the pause time target is maximized with respect to
 280   // the pause interval and b) we maintain the invariant that pause
 281   // time target < pause interval. If the user does not want this
 282   // maximum flexibility, they will have to set the pause interval
 283   // explicitly.
 284 
 285   // First make sure that, if either parameter is set, its value is
 286   // reasonable.
 287   if (!FLAG_IS_DEFAULT(MaxGCPauseMillis)) {
 288     if (MaxGCPauseMillis < 1) {
 289       vm_exit_during_initialization("MaxGCPauseMillis should be "
 290                                     "greater than 0");
 291     }
 292   }
 293   if (!FLAG_IS_DEFAULT(GCPauseIntervalMillis)) {
 294     if (GCPauseIntervalMillis < 1) {
 295       vm_exit_during_initialization("GCPauseIntervalMillis should be "
 296                                     "greater than 0");
 297     }
 298   }
 299 
 300   // Then, if the pause time target parameter was not set, set it to
 301   // the default value.
 302   if (FLAG_IS_DEFAULT(MaxGCPauseMillis)) {
 303     if (FLAG_IS_DEFAULT(GCPauseIntervalMillis)) {
 304       // The default pause time target in G1 is 200ms
 305       FLAG_SET_DEFAULT(MaxGCPauseMillis, 200);
 306     } else {
 307       // We do not allow the pause interval to be set without the
 308       // pause time target
 309       vm_exit_during_initialization("GCPauseIntervalMillis cannot be set "
 310                                     "without setting MaxGCPauseMillis");
 311     }
 312   }
 313 
 314   // Then, if the interval parameter was not set, set it according to
 315   // the pause time target (this will also deal with the case when the
 316   // pause time target is the default value).
 317   if (FLAG_IS_DEFAULT(GCPauseIntervalMillis)) {
 318     FLAG_SET_DEFAULT(GCPauseIntervalMillis, MaxGCPauseMillis + 1);
 319   }
 320 
 321   // Finally, make sure that the two parameters are consistent.
 322   if (MaxGCPauseMillis >= GCPauseIntervalMillis) {
 323     char buffer[256];
 324     jio_snprintf(buffer, 256,
 325                  "MaxGCPauseMillis (%u) should be less than "
 326                  "GCPauseIntervalMillis (%u)",
 327                  MaxGCPauseMillis, GCPauseIntervalMillis);
 328     vm_exit_during_initialization(buffer);
 329   }
 330 
 331   double max_gc_time = (double) MaxGCPauseMillis / 1000.0;
 332   double time_slice  = (double) GCPauseIntervalMillis / 1000.0;
 333   _mmu_tracker = new G1MMUTrackerQueue(time_slice, max_gc_time);
 334   _sigma = (double) G1ConfidencePercent / 100.0;
 335 
 336   // start conservatively (around 50ms is about right)
 337   _concurrent_mark_init_times_ms->add(0.05);
 338   _concurrent_mark_remark_times_ms->add(0.05);
 339   _concurrent_mark_cleanup_times_ms->add(0.20);
 340   _tenuring_threshold = MaxTenuringThreshold;
 341 
 342   // if G1FixedSurvivorSpaceSize is 0 which means the size is not
 343   // fixed, then _max_survivor_regions will be calculated at
 344   // calculate_young_list_target_length during initialization
 345   _max_survivor_regions = G1FixedSurvivorSpaceSize / HeapRegion::GrainBytes;
 346 
 347   assert(GCTimeRatio > 0,
 348          "we should have set it to a default value set_g1_gc_flags() "
 349          "if a user set it to 0");
 350   _gc_overhead_perc = 100.0 * (1.0 / (1.0 + GCTimeRatio));
 351 
 352   initialize_all();
 353 }
 354 
 355 // Increment "i", mod "len"
 356 static void inc_mod(int& i, int len) {
 357   i++; if (i == len) i = 0;
 358 }
 359 
 360 void G1CollectorPolicy::initialize_flags() {
 361   set_min_alignment(HeapRegion::GrainBytes);
 362   set_max_alignment(GenRemSet::max_alignment_constraint(rem_set_name()));
 363   if (SurvivorRatio < 1) {
 364     vm_exit_during_initialization("Invalid survivor ratio specified");
 365   }
 366   CollectorPolicy::initialize_flags();
 367 }
 368 
 369 // The easiest way to deal with the parsing of the NewSize /
 370 // MaxNewSize / etc. parameteres is to re-use the code in the
 371 // TwoGenerationCollectorPolicy class. This is similar to what
 372 // ParallelScavenge does with its GenerationSizer class (see
 373 // ParallelScavengeHeap::initialize()). We might change this in the
 374 // future, but it's a good start.
 375 class G1YoungGenSizer : public TwoGenerationCollectorPolicy {
 376   size_t size_to_region_num(size_t byte_size) {
 377     return MAX2((size_t) 1, byte_size / HeapRegion::GrainBytes);
 378   }
 379 
 380 public:
 381   G1YoungGenSizer() {
 382     initialize_flags();
 383     initialize_size_info();
 384   }
 385 
 386   size_t min_young_region_num() {
 387     return size_to_region_num(_min_gen0_size);
 388   }
 389   size_t initial_young_region_num() {
 390     return size_to_region_num(_initial_gen0_size);
 391   }
 392   size_t max_young_region_num() {
 393     return size_to_region_num(_max_gen0_size);
 394   }
 395 };
 396 
 397 void G1CollectorPolicy::init() {
 398   // Set aside an initial future to_space.
 399   _g1 = G1CollectedHeap::heap();
 400 
 401   assert(Heap_lock->owned_by_self(), "Locking discipline.");
 402 
 403   initialize_gc_policy_counters();
 404 
 405   if (G1Gen) {
 406     _in_young_gc_mode = true;
 407 
 408     G1YoungGenSizer sizer;
 409     size_t initial_region_num = sizer.initial_young_region_num();
 410 
 411     if (UseAdaptiveSizePolicy) {
 412       set_adaptive_young_list_length(true);
 413       _young_list_fixed_length = 0;
 414     } else {
 415       set_adaptive_young_list_length(false);
 416       _young_list_fixed_length = initial_region_num;
 417     }
 418     _free_regions_at_end_of_collection = _g1->free_regions();
 419     calculate_young_list_min_length();
 420     guarantee( _young_list_min_length == 0, "invariant, not enough info" );
 421     calculate_young_list_target_length();
 422   } else {
 423      _young_list_fixed_length = 0;
 424     _in_young_gc_mode = false;
 425   }
 426 
 427   // We may immediately start allocating regions and placing them on the
 428   // collection set list. Initialize the per-collection set info
 429   start_incremental_cset_building();
 430 }
 431 
 432 // Create the jstat counters for the policy.
 433 void G1CollectorPolicy::initialize_gc_policy_counters()
 434 {
 435   _gc_policy_counters = new GCPolicyCounters("GarbageFirst", 1, 2 + G1Gen);
 436 }
 437 
 438 void G1CollectorPolicy::calculate_young_list_min_length() {
 439   _young_list_min_length = 0;
 440 
 441   if (!adaptive_young_list_length())
 442     return;
 443 
 444   if (_alloc_rate_ms_seq->num() > 3) {
 445     double now_sec = os::elapsedTime();
 446     double when_ms = _mmu_tracker->when_max_gc_sec(now_sec) * 1000.0;
 447     double alloc_rate_ms = predict_alloc_rate_ms();
 448     int min_regions = (int) ceil(alloc_rate_ms * when_ms);
 449     int current_region_num = (int) _g1->young_list()->length();
 450     _young_list_min_length = min_regions + current_region_num;
 451   }
 452 }
 453 
 454 void G1CollectorPolicy::calculate_young_list_target_length() {
 455   if (adaptive_young_list_length()) {
 456     size_t rs_lengths = (size_t) get_new_prediction(_rs_lengths_seq);
 457     calculate_young_list_target_length(rs_lengths);
 458   } else {
 459     if (full_young_gcs())
 460       _young_list_target_length = _young_list_fixed_length;
 461     else
 462       _young_list_target_length = _young_list_fixed_length / 2;
 463 
 464     _young_list_target_length = MAX2(_young_list_target_length, (size_t)1);
 465   }
 466   calculate_survivors_policy();
 467 }
 468 
 469 void G1CollectorPolicy::calculate_young_list_target_length(size_t rs_lengths) {
 470   guarantee( adaptive_young_list_length(), "pre-condition" );
 471   guarantee( !_in_marking_window || !_last_full_young_gc, "invariant" );
 472 
 473   double start_time_sec = os::elapsedTime();
 474   size_t min_reserve_perc = MAX2((size_t)2, (size_t)G1ReservePercent);
 475   min_reserve_perc = MIN2((size_t) 50, min_reserve_perc);
 476   size_t reserve_regions =
 477     (size_t) ((double) min_reserve_perc * (double) _g1->n_regions() / 100.0);
 478 
 479   if (full_young_gcs() && _free_regions_at_end_of_collection > 0) {
 480     // we are in fully-young mode and there are free regions in the heap
 481 
 482     double survivor_regions_evac_time =
 483         predict_survivor_regions_evac_time();
 484 
 485     double target_pause_time_ms = _mmu_tracker->max_gc_time() * 1000.0;
 486     size_t pending_cards = (size_t) get_new_prediction(_pending_cards_seq);
 487     size_t adj_rs_lengths = rs_lengths + predict_rs_length_diff();
 488     size_t scanned_cards = predict_young_card_num(adj_rs_lengths);
 489     double base_time_ms = predict_base_elapsed_time_ms(pending_cards, scanned_cards)
 490                           + survivor_regions_evac_time;
 491 
 492     // the result
 493     size_t final_young_length = 0;
 494 
 495     size_t init_free_regions =
 496       MAX2((size_t)0, _free_regions_at_end_of_collection - reserve_regions);
 497 
 498     // if we're still under the pause target...
 499     if (base_time_ms <= target_pause_time_ms) {
 500       // We make sure that the shortest young length that makes sense
 501       // fits within the target pause time.
 502       size_t min_young_length = 1;
 503 
 504       if (predict_will_fit(min_young_length, base_time_ms,
 505                                      init_free_regions, target_pause_time_ms)) {
 506         // The shortest young length will fit within the target pause time;
 507         // we'll now check whether the absolute maximum number of young
 508         // regions will fit in the target pause time. If not, we'll do
 509         // a binary search between min_young_length and max_young_length
 510         size_t abs_max_young_length = _free_regions_at_end_of_collection - 1;
 511         size_t max_young_length = abs_max_young_length;
 512 
 513         if (max_young_length > min_young_length) {
 514           // Let's check if the initial max young length will fit within the
 515           // target pause. If so then there is no need to search for a maximal
 516           // young length - we'll return the initial maximum
 517 
 518           if (predict_will_fit(max_young_length, base_time_ms,
 519                                 init_free_regions, target_pause_time_ms)) {
 520             // The maximum young length will satisfy the target pause time.
 521             // We are done so set min young length to this maximum length.
 522             // The code after the loop will then set final_young_length using
 523             // the value cached in the minimum length.
 524             min_young_length = max_young_length;
 525           } else {
 526             // The maximum possible number of young regions will not fit within
 527             // the target pause time so let's search....
 528 
 529             size_t diff = (max_young_length - min_young_length) / 2;
 530             max_young_length = min_young_length + diff;
 531 
 532             while (max_young_length > min_young_length) {
 533               if (predict_will_fit(max_young_length, base_time_ms,
 534                                         init_free_regions, target_pause_time_ms)) {
 535 
 536                 // The current max young length will fit within the target
 537                 // pause time. Note we do not exit the loop here. By setting
 538                 // min = max, and then increasing the max below means that
 539                 // we will continue searching for an upper bound in the
 540                 // range [max..max+diff]
 541                 min_young_length = max_young_length;
 542               }
 543               diff = (max_young_length - min_young_length) / 2;
 544               max_young_length = min_young_length + diff;
 545             }
 546             // the above loop found a maximal young length that will fit
 547             // within the target pause time.
 548           }
 549           assert(min_young_length <= abs_max_young_length, "just checking");
 550         }
 551         final_young_length = min_young_length;
 552       }
 553     }
 554     // and we're done!
 555 
 556     // we should have at least one region in the target young length
 557     _young_list_target_length =
 558         MAX2((size_t) 1, final_young_length + _recorded_survivor_regions);
 559 
 560     // let's keep an eye of how long we spend on this calculation
 561     // right now, I assume that we'll print it when we need it; we
 562     // should really adde it to the breakdown of a pause
 563     double end_time_sec = os::elapsedTime();
 564     double elapsed_time_ms = (end_time_sec - start_time_sec) * 1000.0;
 565 
 566 #ifdef TRACE_CALC_YOUNG_LENGTH
 567     // leave this in for debugging, just in case
 568     gclog_or_tty->print_cr("target = %1.1lf ms, young = " SIZE_FORMAT ", "
 569                            "elapsed %1.2lf ms, (%s%s) " SIZE_FORMAT SIZE_FORMAT,
 570                            target_pause_time_ms,
 571                            _young_list_target_length
 572                            elapsed_time_ms,
 573                            full_young_gcs() ? "full" : "partial",
 574                            during_initial_mark_pause() ? " i-m" : "",
 575                            _in_marking_window,
 576                            _in_marking_window_im);
 577 #endif // TRACE_CALC_YOUNG_LENGTH
 578 
 579     if (_young_list_target_length < _young_list_min_length) {
 580       // bummer; this means that, if we do a pause when the maximal
 581       // length dictates, we'll violate the pause spacing target (the
 582       // min length was calculate based on the application's current
 583       // alloc rate);
 584 
 585       // so, we have to bite the bullet, and allocate the minimum
 586       // number. We'll violate our target, but we just can't meet it.
 587 
 588 #ifdef TRACE_CALC_YOUNG_LENGTH
 589       // leave this in for debugging, just in case
 590       gclog_or_tty->print_cr("adjusted target length from "
 591                              SIZE_FORMAT " to " SIZE_FORMAT,
 592                              _young_list_target_length, _young_list_min_length);
 593 #endif // TRACE_CALC_YOUNG_LENGTH
 594 
 595       _young_list_target_length = _young_list_min_length;
 596     }
 597   } else {
 598     // we are in a partially-young mode or we've run out of regions (due
 599     // to evacuation failure)
 600 
 601 #ifdef TRACE_CALC_YOUNG_LENGTH
 602     // leave this in for debugging, just in case
 603     gclog_or_tty->print_cr("(partial) setting target to " SIZE_FORMAT
 604                            _young_list_min_length);
 605 #endif // TRACE_CALC_YOUNG_LENGTH
 606     // we'll do the pause as soon as possible by choosing the minimum
 607     _young_list_target_length =
 608       MAX2(_young_list_min_length, (size_t) 1);
 609   }
 610 
 611   _rs_lengths_prediction = rs_lengths;
 612 }
 613 
 614 // This is used by: calculate_young_list_target_length(rs_length). It
 615 // returns true iff:
 616 //   the predicted pause time for the given young list will not overflow
 617 //   the target pause time
 618 // and:
 619 //   the predicted amount of surviving data will not overflow the
 620 //   the amount of free space available for survivor regions.
 621 //
 622 bool
 623 G1CollectorPolicy::predict_will_fit(size_t young_length,
 624                                     double base_time_ms,
 625                                     size_t init_free_regions,
 626                                     double target_pause_time_ms) {
 627 
 628   if (young_length >= init_free_regions)
 629     // end condition 1: not enough space for the young regions
 630     return false;
 631 
 632   double accum_surv_rate_adj = 0.0;
 633   double accum_surv_rate =
 634     accum_yg_surv_rate_pred((int)(young_length - 1)) - accum_surv_rate_adj;
 635 
 636   size_t bytes_to_copy =
 637     (size_t) (accum_surv_rate * (double) HeapRegion::GrainBytes);
 638 
 639   double copy_time_ms = predict_object_copy_time_ms(bytes_to_copy);
 640 
 641   double young_other_time_ms =
 642                        predict_young_other_time_ms(young_length);
 643 
 644   double pause_time_ms =
 645                    base_time_ms + copy_time_ms + young_other_time_ms;
 646 
 647   if (pause_time_ms > target_pause_time_ms)
 648     // end condition 2: over the target pause time
 649     return false;
 650 
 651   size_t free_bytes =
 652                  (init_free_regions - young_length) * HeapRegion::GrainBytes;
 653 
 654   if ((2.0 + sigma()) * (double) bytes_to_copy > (double) free_bytes)
 655     // end condition 3: out of to-space (conservatively)
 656     return false;
 657 
 658   // success!
 659   return true;
 660 }
 661 
 662 double G1CollectorPolicy::predict_survivor_regions_evac_time() {
 663   double survivor_regions_evac_time = 0.0;
 664   for (HeapRegion * r = _recorded_survivor_head;
 665        r != NULL && r != _recorded_survivor_tail->get_next_young_region();
 666        r = r->get_next_young_region()) {
 667     survivor_regions_evac_time += predict_region_elapsed_time_ms(r, true);
 668   }
 669   return survivor_regions_evac_time;
 670 }
 671 
 672 void G1CollectorPolicy::check_prediction_validity() {
 673   guarantee( adaptive_young_list_length(), "should not call this otherwise" );
 674 
 675   size_t rs_lengths = _g1->young_list()->sampled_rs_lengths();
 676   if (rs_lengths > _rs_lengths_prediction) {
 677     // add 10% to avoid having to recalculate often
 678     size_t rs_lengths_prediction = rs_lengths * 1100 / 1000;
 679     calculate_young_list_target_length(rs_lengths_prediction);
 680   }
 681 }
 682 
 683 HeapWord* G1CollectorPolicy::mem_allocate_work(size_t size,
 684                                                bool is_tlab,
 685                                                bool* gc_overhead_limit_was_exceeded) {
 686   guarantee(false, "Not using this policy feature yet.");
 687   return NULL;
 688 }
 689 
 690 // This method controls how a collector handles one or more
 691 // of its generations being fully allocated.
 692 HeapWord* G1CollectorPolicy::satisfy_failed_allocation(size_t size,
 693                                                        bool is_tlab) {
 694   guarantee(false, "Not using this policy feature yet.");
 695   return NULL;
 696 }
 697 
 698 
 699 #ifndef PRODUCT
 700 bool G1CollectorPolicy::verify_young_ages() {
 701   HeapRegion* head = _g1->young_list()->first_region();
 702   return
 703     verify_young_ages(head, _short_lived_surv_rate_group);
 704   // also call verify_young_ages on any additional surv rate groups
 705 }
 706 
 707 bool
 708 G1CollectorPolicy::verify_young_ages(HeapRegion* head,
 709                                      SurvRateGroup *surv_rate_group) {
 710   guarantee( surv_rate_group != NULL, "pre-condition" );
 711 
 712   const char* name = surv_rate_group->name();
 713   bool ret = true;
 714   int prev_age = -1;
 715 
 716   for (HeapRegion* curr = head;
 717        curr != NULL;
 718        curr = curr->get_next_young_region()) {
 719     SurvRateGroup* group = curr->surv_rate_group();
 720     if (group == NULL && !curr->is_survivor()) {
 721       gclog_or_tty->print_cr("## %s: encountered NULL surv_rate_group", name);
 722       ret = false;
 723     }
 724 
 725     if (surv_rate_group == group) {
 726       int age = curr->age_in_surv_rate_group();
 727 
 728       if (age < 0) {
 729         gclog_or_tty->print_cr("## %s: encountered negative age", name);
 730         ret = false;
 731       }
 732 
 733       if (age <= prev_age) {
 734         gclog_or_tty->print_cr("## %s: region ages are not strictly increasing "
 735                                "(%d, %d)", name, age, prev_age);
 736         ret = false;
 737       }
 738       prev_age = age;
 739     }
 740   }
 741 
 742   return ret;
 743 }
 744 #endif // PRODUCT
 745 
 746 void G1CollectorPolicy::record_full_collection_start() {
 747   _cur_collection_start_sec = os::elapsedTime();
 748   // Release the future to-space so that it is available for compaction into.
 749   _g1->set_full_collection();
 750 }
 751 
 752 void G1CollectorPolicy::record_full_collection_end() {
 753   // Consider this like a collection pause for the purposes of allocation
 754   // since last pause.
 755   double end_sec = os::elapsedTime();
 756   double full_gc_time_sec = end_sec - _cur_collection_start_sec;
 757   double full_gc_time_ms = full_gc_time_sec * 1000.0;
 758 
 759   _all_full_gc_times_ms->add(full_gc_time_ms);
 760 
 761   update_recent_gc_times(end_sec, full_gc_time_ms);
 762 
 763   _g1->clear_full_collection();
 764 
 765   // "Nuke" the heuristics that control the fully/partially young GC
 766   // transitions and make sure we start with fully young GCs after the
 767   // Full GC.
 768   set_full_young_gcs(true);
 769   _last_full_young_gc = false;
 770   _should_revert_to_full_young_gcs = false;
 771   clear_initiate_conc_mark_if_possible();
 772   clear_during_initial_mark_pause();
 773   _known_garbage_bytes = 0;
 774   _known_garbage_ratio = 0.0;
 775   _in_marking_window = false;
 776   _in_marking_window_im = false;
 777 
 778   _short_lived_surv_rate_group->start_adding_regions();
 779   // also call this on any additional surv rate groups
 780 
 781   record_survivor_regions(0, NULL, NULL);
 782 
 783   _prev_region_num_young   = _region_num_young;
 784   _prev_region_num_tenured = _region_num_tenured;
 785 
 786   _free_regions_at_end_of_collection = _g1->free_regions();
 787   // Reset survivors SurvRateGroup.
 788   _survivor_surv_rate_group->reset();
 789   calculate_young_list_min_length();
 790   calculate_young_list_target_length();
 791  }
 792 
 793 void G1CollectorPolicy::record_before_bytes(size_t bytes) {
 794   _bytes_in_to_space_before_gc += bytes;
 795 }
 796 
 797 void G1CollectorPolicy::record_after_bytes(size_t bytes) {
 798   _bytes_in_to_space_after_gc += bytes;
 799 }
 800 
 801 void G1CollectorPolicy::record_stop_world_start() {
 802   _stop_world_start = os::elapsedTime();
 803 }
 804 
 805 void G1CollectorPolicy::record_collection_pause_start(double start_time_sec,
 806                                                       size_t start_used) {
 807   if (PrintGCDetails) {
 808     gclog_or_tty->stamp(PrintGCTimeStamps);
 809     gclog_or_tty->print("[GC pause");
 810     if (in_young_gc_mode())
 811       gclog_or_tty->print(" (%s)", full_young_gcs() ? "young" : "partial");
 812   }
 813 
 814   assert(_g1->used_regions() == _g1->recalculate_used_regions(),
 815          "sanity");
 816   assert(_g1->used() == _g1->recalculate_used(), "sanity");
 817 
 818   double s_w_t_ms = (start_time_sec - _stop_world_start) * 1000.0;
 819   _all_stop_world_times_ms->add(s_w_t_ms);
 820   _stop_world_start = 0.0;
 821 
 822   _cur_collection_start_sec = start_time_sec;
 823   _cur_collection_pause_used_at_start_bytes = start_used;
 824   _cur_collection_pause_used_regions_at_start = _g1->used_regions();
 825   _pending_cards = _g1->pending_card_num();
 826   _max_pending_cards = _g1->max_pending_card_num();
 827 
 828   _bytes_in_to_space_before_gc = 0;
 829   _bytes_in_to_space_after_gc = 0;
 830   _bytes_in_collection_set_before_gc = 0;
 831 
 832 #ifdef DEBUG
 833   // initialise these to something well known so that we can spot
 834   // if they are not set properly
 835 
 836   for (int i = 0; i < _parallel_gc_threads; ++i) {
 837     _par_last_gc_worker_start_times_ms[i] = -1234.0;
 838     _par_last_ext_root_scan_times_ms[i] = -1234.0;
 839     _par_last_mark_stack_scan_times_ms[i] = -1234.0;
 840     _par_last_update_rs_times_ms[i] = -1234.0;
 841     _par_last_update_rs_processed_buffers[i] = -1234.0;
 842     _par_last_scan_rs_times_ms[i] = -1234.0;
 843     _par_last_obj_copy_times_ms[i] = -1234.0;
 844     _par_last_termination_times_ms[i] = -1234.0;
 845     _par_last_termination_attempts[i] = -1234.0;
 846     _par_last_gc_worker_end_times_ms[i] = -1234.0;
 847   }
 848 #endif
 849 
 850   for (int i = 0; i < _aux_num; ++i) {
 851     _cur_aux_times_ms[i] = 0.0;
 852     _cur_aux_times_set[i] = false;
 853   }
 854 
 855   _satb_drain_time_set = false;
 856   _last_satb_drain_processed_buffers = -1;
 857 
 858   if (in_young_gc_mode())
 859     _last_young_gc_full = false;
 860 
 861   // do that for any other surv rate groups
 862   _short_lived_surv_rate_group->stop_adding_regions();
 863   _survivors_age_table.clear();
 864 
 865   assert( verify_young_ages(), "region age verification" );
 866 }
 867 
 868 void G1CollectorPolicy::record_mark_closure_time(double mark_closure_time_ms) {
 869   _mark_closure_time_ms = mark_closure_time_ms;
 870 }
 871 
 872 void G1CollectorPolicy::record_concurrent_mark_init_start() {
 873   _mark_init_start_sec = os::elapsedTime();
 874   guarantee(!in_young_gc_mode(), "should not do be here in young GC mode");
 875 }
 876 
 877 void G1CollectorPolicy::record_concurrent_mark_init_end_pre(double
 878                                                    mark_init_elapsed_time_ms) {
 879   _during_marking = true;
 880   assert(!initiate_conc_mark_if_possible(), "we should have cleared it by now");
 881   clear_during_initial_mark_pause();
 882   _cur_mark_stop_world_time_ms = mark_init_elapsed_time_ms;
 883 }
 884 
 885 void G1CollectorPolicy::record_concurrent_mark_init_end() {
 886   double end_time_sec = os::elapsedTime();
 887   double elapsed_time_ms = (end_time_sec - _mark_init_start_sec) * 1000.0;
 888   _concurrent_mark_init_times_ms->add(elapsed_time_ms);
 889   record_concurrent_mark_init_end_pre(elapsed_time_ms);
 890 
 891   _mmu_tracker->add_pause(_mark_init_start_sec, end_time_sec, true);
 892 }
 893 
 894 void G1CollectorPolicy::record_concurrent_mark_remark_start() {
 895   _mark_remark_start_sec = os::elapsedTime();
 896   _during_marking = false;
 897 }
 898 
 899 void G1CollectorPolicy::record_concurrent_mark_remark_end() {
 900   double end_time_sec = os::elapsedTime();
 901   double elapsed_time_ms = (end_time_sec - _mark_remark_start_sec)*1000.0;
 902   _concurrent_mark_remark_times_ms->add(elapsed_time_ms);
 903   _cur_mark_stop_world_time_ms += elapsed_time_ms;
 904   _prev_collection_pause_end_ms += elapsed_time_ms;
 905 
 906   _mmu_tracker->add_pause(_mark_remark_start_sec, end_time_sec, true);
 907 }
 908 
 909 void G1CollectorPolicy::record_concurrent_mark_cleanup_start() {
 910   _mark_cleanup_start_sec = os::elapsedTime();
 911 }
 912 
 913 void
 914 G1CollectorPolicy::record_concurrent_mark_cleanup_end(size_t freed_bytes,
 915                                                       size_t max_live_bytes) {
 916   record_concurrent_mark_cleanup_end_work1(freed_bytes, max_live_bytes);
 917   record_concurrent_mark_cleanup_end_work2();
 918 }
 919 
 920 void
 921 G1CollectorPolicy::
 922 record_concurrent_mark_cleanup_end_work1(size_t freed_bytes,
 923                                          size_t max_live_bytes) {
 924   if (_n_marks < 2) _n_marks++;
 925   if (G1PolicyVerbose > 0)
 926     gclog_or_tty->print_cr("At end of marking, max_live is " SIZE_FORMAT " MB "
 927                            " (of " SIZE_FORMAT " MB heap).",
 928                            max_live_bytes/M, _g1->capacity()/M);
 929 }
 930 
 931 // The important thing about this is that it includes "os::elapsedTime".
 932 void G1CollectorPolicy::record_concurrent_mark_cleanup_end_work2() {
 933   double end_time_sec = os::elapsedTime();
 934   double elapsed_time_ms = (end_time_sec - _mark_cleanup_start_sec)*1000.0;
 935   _concurrent_mark_cleanup_times_ms->add(elapsed_time_ms);
 936   _cur_mark_stop_world_time_ms += elapsed_time_ms;
 937   _prev_collection_pause_end_ms += elapsed_time_ms;
 938 
 939   _mmu_tracker->add_pause(_mark_cleanup_start_sec, end_time_sec, true);
 940 
 941   _num_markings++;
 942 
 943   // We did a marking, so reset the "since_last_mark" variables.
 944   double considerConcMarkCost = 1.0;
 945   // If there are available processors, concurrent activity is free...
 946   if (Threads::number_of_non_daemon_threads() * 2 <
 947       os::active_processor_count()) {
 948     considerConcMarkCost = 0.0;
 949   }
 950   _n_pauses_at_mark_end = _n_pauses;
 951   _n_marks_since_last_pause++;
 952 }
 953 
 954 void
 955 G1CollectorPolicy::record_concurrent_mark_cleanup_completed() {
 956   if (in_young_gc_mode()) {
 957     _should_revert_to_full_young_gcs = false;
 958     _last_full_young_gc = true;
 959     _in_marking_window = false;
 960     if (adaptive_young_list_length())
 961       calculate_young_list_target_length();
 962   }
 963 }
 964 
 965 void G1CollectorPolicy::record_concurrent_pause() {
 966   if (_stop_world_start > 0.0) {
 967     double yield_ms = (os::elapsedTime() - _stop_world_start) * 1000.0;
 968     _all_yield_times_ms->add(yield_ms);
 969   }
 970 }
 971 
 972 void G1CollectorPolicy::record_concurrent_pause_end() {
 973 }
 974 
 975 void G1CollectorPolicy::record_collection_pause_end_CH_strong_roots() {
 976   _cur_CH_strong_roots_end_sec = os::elapsedTime();
 977   _cur_CH_strong_roots_dur_ms =
 978     (_cur_CH_strong_roots_end_sec - _cur_collection_start_sec) * 1000.0;
 979 }
 980 
 981 void G1CollectorPolicy::record_collection_pause_end_G1_strong_roots() {
 982   _cur_G1_strong_roots_end_sec = os::elapsedTime();
 983   _cur_G1_strong_roots_dur_ms =
 984     (_cur_G1_strong_roots_end_sec - _cur_CH_strong_roots_end_sec) * 1000.0;
 985 }
 986 
 987 template<class T>
 988 T sum_of(T* sum_arr, int start, int n, int N) {
 989   T sum = (T)0;
 990   for (int i = 0; i < n; i++) {
 991     int j = (start + i) % N;
 992     sum += sum_arr[j];
 993   }
 994   return sum;
 995 }
 996 
 997 void G1CollectorPolicy::print_par_stats(int level,
 998                                         const char* str,
 999                                         double* data,
1000                                          bool summary) {
1001   double min = data[0], max = data[0];
1002   double total = 0.0;
1003   int j;
1004   for (j = 0; j < level; ++j)
1005     gclog_or_tty->print("   ");
1006   gclog_or_tty->print("[%s (ms):", str);
1007   for (uint i = 0; i < ParallelGCThreads; ++i) {
1008     double val = data[i];
1009     if (val < min)
1010       min = val;
1011     if (val > max)
1012       max = val;
1013     total += val;
1014     gclog_or_tty->print("  %3.1lf", val);
1015   }
1016   if (summary) {
1017     gclog_or_tty->print_cr("");
1018     double avg = total / (double) ParallelGCThreads;
1019     gclog_or_tty->print(" ");
1020     for (j = 0; j < level; ++j)
1021       gclog_or_tty->print("   ");
1022     gclog_or_tty->print("Avg: %5.1lf, Min: %5.1lf, Max: %5.1lf",
1023                         avg, min, max);
1024   }
1025   gclog_or_tty->print_cr("]");
1026 }
1027 
1028 void G1CollectorPolicy::print_par_sizes(int level,
1029                                         const char* str,
1030                                         double* data,
1031                                         bool summary) {
1032   double min = data[0], max = data[0];
1033   double total = 0.0;
1034   int j;
1035   for (j = 0; j < level; ++j)
1036     gclog_or_tty->print("   ");
1037   gclog_or_tty->print("[%s :", str);
1038   for (uint i = 0; i < ParallelGCThreads; ++i) {
1039     double val = data[i];
1040     if (val < min)
1041       min = val;
1042     if (val > max)
1043       max = val;
1044     total += val;
1045     gclog_or_tty->print(" %d", (int) val);
1046   }
1047   if (summary) {
1048     gclog_or_tty->print_cr("");
1049     double avg = total / (double) ParallelGCThreads;
1050     gclog_or_tty->print(" ");
1051     for (j = 0; j < level; ++j)
1052       gclog_or_tty->print("   ");
1053     gclog_or_tty->print("Sum: %d, Avg: %d, Min: %d, Max: %d",
1054                (int)total, (int)avg, (int)min, (int)max);
1055   }
1056   gclog_or_tty->print_cr("]");
1057 }
1058 
1059 void G1CollectorPolicy::print_stats (int level,
1060                                      const char* str,
1061                                      double value) {
1062   for (int j = 0; j < level; ++j)
1063     gclog_or_tty->print("   ");
1064   gclog_or_tty->print_cr("[%s: %5.1lf ms]", str, value);
1065 }
1066 
1067 void G1CollectorPolicy::print_stats (int level,
1068                                      const char* str,
1069                                      int value) {
1070   for (int j = 0; j < level; ++j)
1071     gclog_or_tty->print("   ");
1072   gclog_or_tty->print_cr("[%s: %d]", str, value);
1073 }
1074 
1075 double G1CollectorPolicy::avg_value (double* data) {
1076   if (ParallelGCThreads > 0) {
1077     double ret = 0.0;
1078     for (uint i = 0; i < ParallelGCThreads; ++i)
1079       ret += data[i];
1080     return ret / (double) ParallelGCThreads;
1081   } else {
1082     return data[0];
1083   }
1084 }
1085 
1086 double G1CollectorPolicy::max_value (double* data) {
1087   if (ParallelGCThreads > 0) {
1088     double ret = data[0];
1089     for (uint i = 1; i < ParallelGCThreads; ++i)
1090       if (data[i] > ret)
1091         ret = data[i];
1092     return ret;
1093   } else {
1094     return data[0];
1095   }
1096 }
1097 
1098 double G1CollectorPolicy::sum_of_values (double* data) {
1099   if (ParallelGCThreads > 0) {
1100     double sum = 0.0;
1101     for (uint i = 0; i < ParallelGCThreads; i++)
1102       sum += data[i];
1103     return sum;
1104   } else {
1105     return data[0];
1106   }
1107 }
1108 
1109 double G1CollectorPolicy::max_sum (double* data1,
1110                                    double* data2) {
1111   double ret = data1[0] + data2[0];
1112 
1113   if (ParallelGCThreads > 0) {
1114     for (uint i = 1; i < ParallelGCThreads; ++i) {
1115       double data = data1[i] + data2[i];
1116       if (data > ret)
1117         ret = data;
1118     }
1119   }
1120   return ret;
1121 }
1122 
1123 // Anything below that is considered to be zero
1124 #define MIN_TIMER_GRANULARITY 0.0000001
1125 
1126 void G1CollectorPolicy::record_collection_pause_end() {
1127   double end_time_sec = os::elapsedTime();
1128   double elapsed_ms = _last_pause_time_ms;
1129   bool parallel = ParallelGCThreads > 0;
1130   double evac_ms = (end_time_sec - _cur_G1_strong_roots_end_sec) * 1000.0;
1131   size_t rs_size =
1132     _cur_collection_pause_used_regions_at_start - collection_set_size();
1133   size_t cur_used_bytes = _g1->used();
1134   assert(cur_used_bytes == _g1->recalculate_used(), "It should!");
1135   bool last_pause_included_initial_mark = false;
1136   bool update_stats = !_g1->evacuation_failed();
1137 
1138 #ifndef PRODUCT
1139   if (G1YoungSurvRateVerbose) {
1140     gclog_or_tty->print_cr("");
1141     _short_lived_surv_rate_group->print();
1142     // do that for any other surv rate groups too
1143   }
1144 #endif // PRODUCT
1145 
1146   if (in_young_gc_mode()) {
1147     last_pause_included_initial_mark = during_initial_mark_pause();
1148     if (last_pause_included_initial_mark)
1149       record_concurrent_mark_init_end_pre(0.0);
1150 
1151     size_t min_used_targ =
1152       (_g1->capacity() / 100) * InitiatingHeapOccupancyPercent;
1153 
1154 
1155     if (!_g1->mark_in_progress() && !_last_full_young_gc) {
1156       assert(!last_pause_included_initial_mark, "invariant");
1157       if (cur_used_bytes > min_used_targ &&
1158           cur_used_bytes > _prev_collection_pause_used_at_end_bytes) {
1159         assert(!during_initial_mark_pause(), "we should not see this here");
1160 
1161         // Note: this might have already been set, if during the last
1162         // pause we decided to start a cycle but at the beginning of
1163         // this pause we decided to postpone it. That's OK.
1164         set_initiate_conc_mark_if_possible();
1165       }
1166     }
1167 
1168     _prev_collection_pause_used_at_end_bytes = cur_used_bytes;
1169   }
1170 
1171   _mmu_tracker->add_pause(end_time_sec - elapsed_ms/1000.0,
1172                           end_time_sec, false);
1173 
1174   guarantee(_cur_collection_pause_used_regions_at_start >=
1175             collection_set_size(),
1176             "Negative RS size?");
1177 
1178   // This assert is exempted when we're doing parallel collection pauses,
1179   // because the fragmentation caused by the parallel GC allocation buffers
1180   // can lead to more memory being used during collection than was used
1181   // before. Best leave this out until the fragmentation problem is fixed.
1182   // Pauses in which evacuation failed can also lead to negative
1183   // collections, since no space is reclaimed from a region containing an
1184   // object whose evacuation failed.
1185   // Further, we're now always doing parallel collection.  But I'm still
1186   // leaving this here as a placeholder for a more precise assertion later.
1187   // (DLD, 10/05.)
1188   assert((true || parallel) // Always using GC LABs now.
1189          || _g1->evacuation_failed()
1190          || _cur_collection_pause_used_at_start_bytes >= cur_used_bytes,
1191          "Negative collection");
1192 
1193   size_t freed_bytes =
1194     _cur_collection_pause_used_at_start_bytes - cur_used_bytes;
1195   size_t surviving_bytes = _collection_set_bytes_used_before - freed_bytes;
1196 
1197   double survival_fraction =
1198     (double)surviving_bytes/
1199     (double)_collection_set_bytes_used_before;
1200 
1201   _n_pauses++;
1202 
1203   if (update_stats) {
1204     _recent_CH_strong_roots_times_ms->add(_cur_CH_strong_roots_dur_ms);
1205     _recent_G1_strong_roots_times_ms->add(_cur_G1_strong_roots_dur_ms);
1206     _recent_evac_times_ms->add(evac_ms);
1207     _recent_pause_times_ms->add(elapsed_ms);
1208 
1209     _recent_rs_sizes->add(rs_size);
1210 
1211     // We exempt parallel collection from this check because Alloc Buffer
1212     // fragmentation can produce negative collections.  Same with evac
1213     // failure.
1214     // Further, we're now always doing parallel collection.  But I'm still
1215     // leaving this here as a placeholder for a more precise assertion later.
1216     // (DLD, 10/05.
1217     assert((true || parallel)
1218            || _g1->evacuation_failed()
1219            || surviving_bytes <= _collection_set_bytes_used_before,
1220            "Or else negative collection!");
1221     _recent_CS_bytes_used_before->add(_collection_set_bytes_used_before);
1222     _recent_CS_bytes_surviving->add(surviving_bytes);
1223 
1224     // this is where we update the allocation rate of the application
1225     double app_time_ms =
1226       (_cur_collection_start_sec * 1000.0 - _prev_collection_pause_end_ms);
1227     if (app_time_ms < MIN_TIMER_GRANULARITY) {
1228       // This usually happens due to the timer not having the required
1229       // granularity. Some Linuxes are the usual culprits.
1230       // We'll just set it to something (arbitrarily) small.
1231       app_time_ms = 1.0;
1232     }
1233     size_t regions_allocated =
1234       (_region_num_young - _prev_region_num_young) +
1235       (_region_num_tenured - _prev_region_num_tenured);
1236     double alloc_rate_ms = (double) regions_allocated / app_time_ms;
1237     _alloc_rate_ms_seq->add(alloc_rate_ms);
1238     _prev_region_num_young   = _region_num_young;
1239     _prev_region_num_tenured = _region_num_tenured;
1240 
1241     double interval_ms =
1242       (end_time_sec - _recent_prev_end_times_for_all_gcs_sec->oldest()) * 1000.0;
1243     update_recent_gc_times(end_time_sec, elapsed_ms);
1244     _recent_avg_pause_time_ratio = _recent_gc_times_ms->sum()/interval_ms;
1245     if (recent_avg_pause_time_ratio() < 0.0 ||
1246         (recent_avg_pause_time_ratio() - 1.0 > 0.0)) {
1247 #ifndef PRODUCT
1248       // Dump info to allow post-facto debugging
1249       gclog_or_tty->print_cr("recent_avg_pause_time_ratio() out of bounds");
1250       gclog_or_tty->print_cr("-------------------------------------------");
1251       gclog_or_tty->print_cr("Recent GC Times (ms):");
1252       _recent_gc_times_ms->dump();
1253       gclog_or_tty->print_cr("(End Time=%3.3f) Recent GC End Times (s):", end_time_sec);
1254       _recent_prev_end_times_for_all_gcs_sec->dump();
1255       gclog_or_tty->print_cr("GC = %3.3f, Interval = %3.3f, Ratio = %3.3f",
1256                              _recent_gc_times_ms->sum(), interval_ms, recent_avg_pause_time_ratio());
1257       // In debug mode, terminate the JVM if the user wants to debug at this point.
1258       assert(!G1FailOnFPError, "Debugging data for CR 6898948 has been dumped above");
1259 #endif  // !PRODUCT
1260       // Clip ratio between 0.0 and 1.0, and continue. This will be fixed in
1261       // CR 6902692 by redoing the manner in which the ratio is incrementally computed.
1262       if (_recent_avg_pause_time_ratio < 0.0) {
1263         _recent_avg_pause_time_ratio = 0.0;
1264       } else {
1265         assert(_recent_avg_pause_time_ratio - 1.0 > 0.0, "Ctl-point invariant");
1266         _recent_avg_pause_time_ratio = 1.0;
1267       }
1268     }
1269   }
1270 
1271   if (G1PolicyVerbose > 1) {
1272     gclog_or_tty->print_cr("   Recording collection pause(%d)", _n_pauses);
1273   }
1274 
1275   PauseSummary* summary = _summary;
1276 
1277   double ext_root_scan_time = avg_value(_par_last_ext_root_scan_times_ms);
1278   double mark_stack_scan_time = avg_value(_par_last_mark_stack_scan_times_ms);
1279   double update_rs_time = avg_value(_par_last_update_rs_times_ms);
1280   double update_rs_processed_buffers =
1281     sum_of_values(_par_last_update_rs_processed_buffers);
1282   double scan_rs_time = avg_value(_par_last_scan_rs_times_ms);
1283   double obj_copy_time = avg_value(_par_last_obj_copy_times_ms);
1284   double termination_time = avg_value(_par_last_termination_times_ms);
1285 
1286   double parallel_other_time = _cur_collection_par_time_ms -
1287     (update_rs_time + ext_root_scan_time + mark_stack_scan_time +
1288      scan_rs_time + obj_copy_time + termination_time);
1289   if (update_stats) {
1290     MainBodySummary* body_summary = summary->main_body_summary();
1291     guarantee(body_summary != NULL, "should not be null!");
1292 
1293     if (_satb_drain_time_set)
1294       body_summary->record_satb_drain_time_ms(_cur_satb_drain_time_ms);
1295     else
1296       body_summary->record_satb_drain_time_ms(0.0);
1297     body_summary->record_ext_root_scan_time_ms(ext_root_scan_time);
1298     body_summary->record_mark_stack_scan_time_ms(mark_stack_scan_time);
1299     body_summary->record_update_rs_time_ms(update_rs_time);
1300     body_summary->record_scan_rs_time_ms(scan_rs_time);
1301     body_summary->record_obj_copy_time_ms(obj_copy_time);
1302     if (parallel) {
1303       body_summary->record_parallel_time_ms(_cur_collection_par_time_ms);
1304       body_summary->record_clear_ct_time_ms(_cur_clear_ct_time_ms);
1305       body_summary->record_termination_time_ms(termination_time);
1306       body_summary->record_parallel_other_time_ms(parallel_other_time);
1307     }
1308     body_summary->record_mark_closure_time_ms(_mark_closure_time_ms);
1309   }
1310 
1311   if (G1PolicyVerbose > 1) {
1312     gclog_or_tty->print_cr("      ET: %10.6f ms           (avg: %10.6f ms)\n"
1313                            "        CH Strong: %10.6f ms    (avg: %10.6f ms)\n"
1314                            "        G1 Strong: %10.6f ms    (avg: %10.6f ms)\n"
1315                            "        Evac:      %10.6f ms    (avg: %10.6f ms)\n"
1316                            "       ET-RS:  %10.6f ms      (avg: %10.6f ms)\n"
1317                            "      |RS|: " SIZE_FORMAT,
1318                            elapsed_ms, recent_avg_time_for_pauses_ms(),
1319                            _cur_CH_strong_roots_dur_ms, recent_avg_time_for_CH_strong_ms(),
1320                            _cur_G1_strong_roots_dur_ms, recent_avg_time_for_G1_strong_ms(),
1321                            evac_ms, recent_avg_time_for_evac_ms(),
1322                            scan_rs_time,
1323                            recent_avg_time_for_pauses_ms() -
1324                            recent_avg_time_for_G1_strong_ms(),
1325                            rs_size);
1326 
1327     gclog_or_tty->print_cr("       Used at start: " SIZE_FORMAT"K"
1328                            "       At end " SIZE_FORMAT "K\n"
1329                            "       garbage      : " SIZE_FORMAT "K"
1330                            "       of     " SIZE_FORMAT "K\n"
1331                            "       survival     : %6.2f%%  (%6.2f%% avg)",
1332                            _cur_collection_pause_used_at_start_bytes/K,
1333                            _g1->used()/K, freed_bytes/K,
1334                            _collection_set_bytes_used_before/K,
1335                            survival_fraction*100.0,
1336                            recent_avg_survival_fraction()*100.0);
1337     gclog_or_tty->print_cr("       Recent %% gc pause time: %6.2f",
1338                            recent_avg_pause_time_ratio() * 100.0);
1339   }
1340 
1341   double other_time_ms = elapsed_ms;
1342 
1343   if (_satb_drain_time_set) {
1344     other_time_ms -= _cur_satb_drain_time_ms;
1345   }
1346 
1347   if (parallel) {
1348     other_time_ms -= _cur_collection_par_time_ms + _cur_clear_ct_time_ms;
1349   } else {
1350     other_time_ms -=
1351       update_rs_time +
1352       ext_root_scan_time + mark_stack_scan_time +
1353       scan_rs_time + obj_copy_time;
1354   }
1355 
1356   if (PrintGCDetails) {
1357     gclog_or_tty->print_cr("%s, %1.8lf secs]",
1358                            (last_pause_included_initial_mark) ? " (initial-mark)" : "",
1359                            elapsed_ms / 1000.0);
1360 
1361     if (_satb_drain_time_set) {
1362       print_stats(1, "SATB Drain Time", _cur_satb_drain_time_ms);
1363     }
1364     if (_last_satb_drain_processed_buffers >= 0) {
1365       print_stats(2, "Processed Buffers", _last_satb_drain_processed_buffers);
1366     }
1367     if (parallel) {
1368       print_stats(1, "Parallel Time", _cur_collection_par_time_ms);
1369       print_par_stats(2, "GC Worker Start Time",
1370                       _par_last_gc_worker_start_times_ms, false);
1371       print_par_stats(2, "Update RS", _par_last_update_rs_times_ms);
1372       print_par_sizes(3, "Processed Buffers",
1373                       _par_last_update_rs_processed_buffers, true);
1374       print_par_stats(2, "Ext Root Scanning",
1375                       _par_last_ext_root_scan_times_ms);
1376       print_par_stats(2, "Mark Stack Scanning",
1377                       _par_last_mark_stack_scan_times_ms);
1378       print_par_stats(2, "Scan RS", _par_last_scan_rs_times_ms);
1379       print_par_stats(2, "Object Copy", _par_last_obj_copy_times_ms);
1380       print_par_stats(2, "Termination", _par_last_termination_times_ms);
1381       print_par_sizes(3, "Termination Attempts",
1382                       _par_last_termination_attempts, true);
1383       print_par_stats(2, "GC Worker End Time",
1384                       _par_last_gc_worker_end_times_ms, false);
1385       print_stats(2, "Other", parallel_other_time);
1386       print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
1387     } else {
1388       print_stats(1, "Update RS", update_rs_time);
1389       print_stats(2, "Processed Buffers",
1390                   (int)update_rs_processed_buffers);
1391       print_stats(1, "Ext Root Scanning", ext_root_scan_time);
1392       print_stats(1, "Mark Stack Scanning", mark_stack_scan_time);
1393       print_stats(1, "Scan RS", scan_rs_time);
1394       print_stats(1, "Object Copying", obj_copy_time);
1395     }
1396 #ifndef PRODUCT
1397     print_stats(1, "Cur Clear CC", _cur_clear_cc_time_ms);
1398     print_stats(1, "Cum Clear CC", _cum_clear_cc_time_ms);
1399     print_stats(1, "Min Clear CC", _min_clear_cc_time_ms);
1400     print_stats(1, "Max Clear CC", _max_clear_cc_time_ms);
1401     if (_num_cc_clears > 0) {
1402       print_stats(1, "Avg Clear CC", _cum_clear_cc_time_ms / ((double)_num_cc_clears));
1403     }
1404 #endif
1405     print_stats(1, "Other", other_time_ms);
1406     print_stats(2, "Choose CSet", _recorded_young_cset_choice_time_ms);
1407 
1408     for (int i = 0; i < _aux_num; ++i) {
1409       if (_cur_aux_times_set[i]) {
1410         char buffer[96];
1411         sprintf(buffer, "Aux%d", i);
1412         print_stats(1, buffer, _cur_aux_times_ms[i]);
1413       }
1414     }
1415   }
1416   if (PrintGCDetails)
1417     gclog_or_tty->print("   [");
1418   if (PrintGC || PrintGCDetails)
1419     _g1->print_size_transition(gclog_or_tty,
1420                                _cur_collection_pause_used_at_start_bytes,
1421                                _g1->used(), _g1->capacity());
1422   if (PrintGCDetails)
1423     gclog_or_tty->print_cr("]");
1424 
1425   _all_pause_times_ms->add(elapsed_ms);
1426   if (update_stats) {
1427     summary->record_total_time_ms(elapsed_ms);
1428     summary->record_other_time_ms(other_time_ms);
1429   }
1430   for (int i = 0; i < _aux_num; ++i)
1431     if (_cur_aux_times_set[i])
1432       _all_aux_times_ms[i].add(_cur_aux_times_ms[i]);
1433 
1434   // Reset marks-between-pauses counter.
1435   _n_marks_since_last_pause = 0;
1436 
1437   // Update the efficiency-since-mark vars.
1438   double proc_ms = elapsed_ms * (double) _parallel_gc_threads;
1439   if (elapsed_ms < MIN_TIMER_GRANULARITY) {
1440     // This usually happens due to the timer not having the required
1441     // granularity. Some Linuxes are the usual culprits.
1442     // We'll just set it to something (arbitrarily) small.
1443     proc_ms = 1.0;
1444   }
1445   double cur_efficiency = (double) freed_bytes / proc_ms;
1446 
1447   bool new_in_marking_window = _in_marking_window;
1448   bool new_in_marking_window_im = false;
1449   if (during_initial_mark_pause()) {
1450     new_in_marking_window = true;
1451     new_in_marking_window_im = true;
1452   }
1453 
1454   if (in_young_gc_mode()) {
1455     if (_last_full_young_gc) {
1456       set_full_young_gcs(false);
1457       _last_full_young_gc = false;
1458     }
1459 
1460     if ( !_last_young_gc_full ) {
1461       if ( _should_revert_to_full_young_gcs ||
1462            _known_garbage_ratio < 0.05 ||
1463            (adaptive_young_list_length() &&
1464            (get_gc_eff_factor() * cur_efficiency < predict_young_gc_eff())) ) {
1465         set_full_young_gcs(true);
1466       }
1467     }
1468     _should_revert_to_full_young_gcs = false;
1469 
1470     if (_last_young_gc_full && !_during_marking)
1471       _young_gc_eff_seq->add(cur_efficiency);
1472   }
1473 
1474   _short_lived_surv_rate_group->start_adding_regions();
1475   // do that for any other surv rate groupsx
1476 
1477   // <NEW PREDICTION>
1478 
1479   if (update_stats) {
1480     double pause_time_ms = elapsed_ms;
1481 
1482     size_t diff = 0;
1483     if (_max_pending_cards >= _pending_cards)
1484       diff = _max_pending_cards - _pending_cards;
1485     _pending_card_diff_seq->add((double) diff);
1486 
1487     double cost_per_card_ms = 0.0;
1488     if (_pending_cards > 0) {
1489       cost_per_card_ms = update_rs_time / (double) _pending_cards;
1490       _cost_per_card_ms_seq->add(cost_per_card_ms);
1491     }
1492 
1493     size_t cards_scanned = _g1->cards_scanned();
1494 
1495     double cost_per_entry_ms = 0.0;
1496     if (cards_scanned > 10) {
1497       cost_per_entry_ms = scan_rs_time / (double) cards_scanned;
1498       if (_last_young_gc_full)
1499         _cost_per_entry_ms_seq->add(cost_per_entry_ms);
1500       else
1501         _partially_young_cost_per_entry_ms_seq->add(cost_per_entry_ms);
1502     }
1503 
1504     if (_max_rs_lengths > 0) {
1505       double cards_per_entry_ratio =
1506         (double) cards_scanned / (double) _max_rs_lengths;
1507       if (_last_young_gc_full)
1508         _fully_young_cards_per_entry_ratio_seq->add(cards_per_entry_ratio);
1509       else
1510         _partially_young_cards_per_entry_ratio_seq->add(cards_per_entry_ratio);
1511     }
1512 
1513     size_t rs_length_diff = _max_rs_lengths - _recorded_rs_lengths;
1514     if (rs_length_diff >= 0)
1515       _rs_length_diff_seq->add((double) rs_length_diff);
1516 
1517     size_t copied_bytes = surviving_bytes;
1518     double cost_per_byte_ms = 0.0;
1519     if (copied_bytes > 0) {
1520       cost_per_byte_ms = obj_copy_time / (double) copied_bytes;
1521       if (_in_marking_window)
1522         _cost_per_byte_ms_during_cm_seq->add(cost_per_byte_ms);
1523       else
1524         _cost_per_byte_ms_seq->add(cost_per_byte_ms);
1525     }
1526 
1527     double all_other_time_ms = pause_time_ms -
1528       (update_rs_time + scan_rs_time + obj_copy_time +
1529        _mark_closure_time_ms + termination_time);
1530 
1531     double young_other_time_ms = 0.0;
1532     if (_recorded_young_regions > 0) {
1533       young_other_time_ms =
1534         _recorded_young_cset_choice_time_ms +
1535         _recorded_young_free_cset_time_ms;
1536       _young_other_cost_per_region_ms_seq->add(young_other_time_ms /
1537                                              (double) _recorded_young_regions);
1538     }
1539     double non_young_other_time_ms = 0.0;
1540     if (_recorded_non_young_regions > 0) {
1541       non_young_other_time_ms =
1542         _recorded_non_young_cset_choice_time_ms +
1543         _recorded_non_young_free_cset_time_ms;
1544 
1545       _non_young_other_cost_per_region_ms_seq->add(non_young_other_time_ms /
1546                                          (double) _recorded_non_young_regions);
1547     }
1548 
1549     double constant_other_time_ms = all_other_time_ms -
1550       (young_other_time_ms + non_young_other_time_ms);
1551     _constant_other_time_ms_seq->add(constant_other_time_ms);
1552 
1553     double survival_ratio = 0.0;
1554     if (_bytes_in_collection_set_before_gc > 0) {
1555       survival_ratio = (double) bytes_in_to_space_during_gc() /
1556         (double) _bytes_in_collection_set_before_gc;
1557     }
1558 
1559     _pending_cards_seq->add((double) _pending_cards);
1560     _scanned_cards_seq->add((double) cards_scanned);
1561     _rs_lengths_seq->add((double) _max_rs_lengths);
1562 
1563     double expensive_region_limit_ms =
1564       (double) MaxGCPauseMillis - predict_constant_other_time_ms();
1565     if (expensive_region_limit_ms < 0.0) {
1566       // this means that the other time was predicted to be longer than
1567       // than the max pause time
1568       expensive_region_limit_ms = (double) MaxGCPauseMillis;
1569     }
1570     _expensive_region_limit_ms = expensive_region_limit_ms;
1571 
1572     if (PREDICTIONS_VERBOSE) {
1573       gclog_or_tty->print_cr("");
1574       gclog_or_tty->print_cr("PREDICTIONS %1.4lf %d "
1575                     "REGIONS %d %d %d "
1576                     "PENDING_CARDS %d %d "
1577                     "CARDS_SCANNED %d %d "
1578                     "RS_LENGTHS %d %d "
1579                     "RS_UPDATE %1.6lf %1.6lf RS_SCAN %1.6lf %1.6lf "
1580                     "SURVIVAL_RATIO %1.6lf %1.6lf "
1581                     "OBJECT_COPY %1.6lf %1.6lf OTHER_CONSTANT %1.6lf %1.6lf "
1582                     "OTHER_YOUNG %1.6lf %1.6lf "
1583                     "OTHER_NON_YOUNG %1.6lf %1.6lf "
1584                     "VTIME_DIFF %1.6lf TERMINATION %1.6lf "
1585                     "ELAPSED %1.6lf %1.6lf ",
1586                     _cur_collection_start_sec,
1587                     (!_last_young_gc_full) ? 2 :
1588                     (last_pause_included_initial_mark) ? 1 : 0,
1589                     _recorded_region_num,
1590                     _recorded_young_regions,
1591                     _recorded_non_young_regions,
1592                     _predicted_pending_cards, _pending_cards,
1593                     _predicted_cards_scanned, cards_scanned,
1594                     _predicted_rs_lengths, _max_rs_lengths,
1595                     _predicted_rs_update_time_ms, update_rs_time,
1596                     _predicted_rs_scan_time_ms, scan_rs_time,
1597                     _predicted_survival_ratio, survival_ratio,
1598                     _predicted_object_copy_time_ms, obj_copy_time,
1599                     _predicted_constant_other_time_ms, constant_other_time_ms,
1600                     _predicted_young_other_time_ms, young_other_time_ms,
1601                     _predicted_non_young_other_time_ms,
1602                     non_young_other_time_ms,
1603                     _vtime_diff_ms, termination_time,
1604                     _predicted_pause_time_ms, elapsed_ms);
1605     }
1606 
1607     if (G1PolicyVerbose > 0) {
1608       gclog_or_tty->print_cr("Pause Time, predicted: %1.4lfms (predicted %s), actual: %1.4lfms",
1609                     _predicted_pause_time_ms,
1610                     (_within_target) ? "within" : "outside",
1611                     elapsed_ms);
1612     }
1613 
1614   }
1615 
1616   _in_marking_window = new_in_marking_window;
1617   _in_marking_window_im = new_in_marking_window_im;
1618   _free_regions_at_end_of_collection = _g1->free_regions();
1619   calculate_young_list_min_length();
1620   calculate_young_list_target_length();
1621 
1622   // Note that _mmu_tracker->max_gc_time() returns the time in seconds.
1623   double update_rs_time_goal_ms = _mmu_tracker->max_gc_time() * MILLIUNITS * G1RSetUpdatingPauseTimePercent / 100.0;
1624   adjust_concurrent_refinement(update_rs_time, update_rs_processed_buffers, update_rs_time_goal_ms);
1625   // </NEW PREDICTION>
1626 }
1627 
1628 // <NEW PREDICTION>
1629 
1630 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
1631                                                      double update_rs_processed_buffers,
1632                                                      double goal_ms) {
1633   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
1634   ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine();
1635 
1636   if (G1UseAdaptiveConcRefinement) {
1637     const int k_gy = 3, k_gr = 6;
1638     const double inc_k = 1.1, dec_k = 0.9;
1639 
1640     int g = cg1r->green_zone();
1641     if (update_rs_time > goal_ms) {
1642       g = (int)(g * dec_k);  // Can become 0, that's OK. That would mean a mutator-only processing.
1643     } else {
1644       if (update_rs_time < goal_ms && update_rs_processed_buffers > g) {
1645         g = (int)MAX2(g * inc_k, g + 1.0);
1646       }
1647     }
1648     // Change the refinement threads params
1649     cg1r->set_green_zone(g);
1650     cg1r->set_yellow_zone(g * k_gy);
1651     cg1r->set_red_zone(g * k_gr);
1652     cg1r->reinitialize_threads();
1653 
1654     int processing_threshold_delta = MAX2((int)(cg1r->green_zone() * sigma()), 1);
1655     int processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta,
1656                                     cg1r->yellow_zone());
1657     // Change the barrier params
1658     dcqs.set_process_completed_threshold(processing_threshold);
1659     dcqs.set_max_completed_queue(cg1r->red_zone());
1660   }
1661 
1662   int curr_queue_size = dcqs.completed_buffers_num();
1663   if (curr_queue_size >= cg1r->yellow_zone()) {
1664     dcqs.set_completed_queue_padding(curr_queue_size);
1665   } else {
1666     dcqs.set_completed_queue_padding(0);
1667   }
1668   dcqs.notify_if_necessary();
1669 }
1670 
1671 double
1672 G1CollectorPolicy::
1673 predict_young_collection_elapsed_time_ms(size_t adjustment) {
1674   guarantee( adjustment == 0 || adjustment == 1, "invariant" );
1675 
1676   G1CollectedHeap* g1h = G1CollectedHeap::heap();
1677   size_t young_num = g1h->young_list()->length();
1678   if (young_num == 0)
1679     return 0.0;
1680 
1681   young_num += adjustment;
1682   size_t pending_cards = predict_pending_cards();
1683   size_t rs_lengths = g1h->young_list()->sampled_rs_lengths() +
1684                       predict_rs_length_diff();
1685   size_t card_num;
1686   if (full_young_gcs())
1687     card_num = predict_young_card_num(rs_lengths);
1688   else
1689     card_num = predict_non_young_card_num(rs_lengths);
1690   size_t young_byte_size = young_num * HeapRegion::GrainBytes;
1691   double accum_yg_surv_rate =
1692     _short_lived_surv_rate_group->accum_surv_rate(adjustment);
1693 
1694   size_t bytes_to_copy =
1695     (size_t) (accum_yg_surv_rate * (double) HeapRegion::GrainBytes);
1696 
1697   return
1698     predict_rs_update_time_ms(pending_cards) +
1699     predict_rs_scan_time_ms(card_num) +
1700     predict_object_copy_time_ms(bytes_to_copy) +
1701     predict_young_other_time_ms(young_num) +
1702     predict_constant_other_time_ms();
1703 }
1704 
1705 double
1706 G1CollectorPolicy::predict_base_elapsed_time_ms(size_t pending_cards) {
1707   size_t rs_length = predict_rs_length_diff();
1708   size_t card_num;
1709   if (full_young_gcs())
1710     card_num = predict_young_card_num(rs_length);
1711   else
1712     card_num = predict_non_young_card_num(rs_length);
1713   return predict_base_elapsed_time_ms(pending_cards, card_num);
1714 }
1715 
1716 double
1717 G1CollectorPolicy::predict_base_elapsed_time_ms(size_t pending_cards,
1718                                                 size_t scanned_cards) {
1719   return
1720     predict_rs_update_time_ms(pending_cards) +
1721     predict_rs_scan_time_ms(scanned_cards) +
1722     predict_constant_other_time_ms();
1723 }
1724 
1725 double
1726 G1CollectorPolicy::predict_region_elapsed_time_ms(HeapRegion* hr,
1727                                                   bool young) {
1728   size_t rs_length = hr->rem_set()->occupied();
1729   size_t card_num;
1730   if (full_young_gcs())
1731     card_num = predict_young_card_num(rs_length);
1732   else
1733     card_num = predict_non_young_card_num(rs_length);
1734   size_t bytes_to_copy = predict_bytes_to_copy(hr);
1735 
1736   double region_elapsed_time_ms =
1737     predict_rs_scan_time_ms(card_num) +
1738     predict_object_copy_time_ms(bytes_to_copy);
1739 
1740   if (young)
1741     region_elapsed_time_ms += predict_young_other_time_ms(1);
1742   else
1743     region_elapsed_time_ms += predict_non_young_other_time_ms(1);
1744 
1745   return region_elapsed_time_ms;
1746 }
1747 
1748 size_t
1749 G1CollectorPolicy::predict_bytes_to_copy(HeapRegion* hr) {
1750   size_t bytes_to_copy;
1751   if (hr->is_marked())
1752     bytes_to_copy = hr->max_live_bytes();
1753   else {
1754     guarantee( hr->is_young() && hr->age_in_surv_rate_group() != -1,
1755                "invariant" );
1756     int age = hr->age_in_surv_rate_group();
1757     double yg_surv_rate = predict_yg_surv_rate(age, hr->surv_rate_group());
1758     bytes_to_copy = (size_t) ((double) hr->used() * yg_surv_rate);
1759   }
1760 
1761   return bytes_to_copy;
1762 }
1763 
1764 void
1765 G1CollectorPolicy::start_recording_regions() {
1766   _recorded_rs_lengths            = 0;
1767   _recorded_young_regions         = 0;
1768   _recorded_non_young_regions     = 0;
1769 
1770 #if PREDICTIONS_VERBOSE
1771   _recorded_marked_bytes          = 0;
1772   _recorded_young_bytes           = 0;
1773   _predicted_bytes_to_copy        = 0;
1774   _predicted_rs_lengths           = 0;
1775   _predicted_cards_scanned        = 0;
1776 #endif // PREDICTIONS_VERBOSE
1777 }
1778 
1779 void
1780 G1CollectorPolicy::record_cset_region_info(HeapRegion* hr, bool young) {
1781 #if PREDICTIONS_VERBOSE
1782   if (!young) {
1783     _recorded_marked_bytes += hr->max_live_bytes();
1784   }
1785   _predicted_bytes_to_copy += predict_bytes_to_copy(hr);
1786 #endif // PREDICTIONS_VERBOSE
1787 
1788   size_t rs_length = hr->rem_set()->occupied();
1789   _recorded_rs_lengths += rs_length;
1790 }
1791 
1792 void
1793 G1CollectorPolicy::record_non_young_cset_region(HeapRegion* hr) {
1794   assert(!hr->is_young(), "should not call this");
1795   ++_recorded_non_young_regions;
1796   record_cset_region_info(hr, false);
1797 }
1798 
1799 void
1800 G1CollectorPolicy::set_recorded_young_regions(size_t n_regions) {
1801   _recorded_young_regions = n_regions;
1802 }
1803 
1804 void G1CollectorPolicy::set_recorded_young_bytes(size_t bytes) {
1805 #if PREDICTIONS_VERBOSE
1806   _recorded_young_bytes = bytes;
1807 #endif // PREDICTIONS_VERBOSE
1808 }
1809 
1810 void G1CollectorPolicy::set_recorded_rs_lengths(size_t rs_lengths) {
1811   _recorded_rs_lengths = rs_lengths;
1812 }
1813 
1814 void G1CollectorPolicy::set_predicted_bytes_to_copy(size_t bytes) {
1815   _predicted_bytes_to_copy = bytes;
1816 }
1817 
1818 void
1819 G1CollectorPolicy::end_recording_regions() {
1820   // The _predicted_pause_time_ms field is referenced in code
1821   // not under PREDICTIONS_VERBOSE. Let's initialize it.
1822   _predicted_pause_time_ms = -1.0;
1823 
1824 #if PREDICTIONS_VERBOSE
1825   _predicted_pending_cards = predict_pending_cards();
1826   _predicted_rs_lengths = _recorded_rs_lengths + predict_rs_length_diff();
1827   if (full_young_gcs())
1828     _predicted_cards_scanned += predict_young_card_num(_predicted_rs_lengths);
1829   else
1830     _predicted_cards_scanned +=
1831       predict_non_young_card_num(_predicted_rs_lengths);
1832   _recorded_region_num = _recorded_young_regions + _recorded_non_young_regions;
1833 
1834   _predicted_rs_update_time_ms =
1835     predict_rs_update_time_ms(_g1->pending_card_num());
1836   _predicted_rs_scan_time_ms =
1837     predict_rs_scan_time_ms(_predicted_cards_scanned);
1838   _predicted_object_copy_time_ms =
1839     predict_object_copy_time_ms(_predicted_bytes_to_copy);
1840   _predicted_constant_other_time_ms =
1841     predict_constant_other_time_ms();
1842   _predicted_young_other_time_ms =
1843     predict_young_other_time_ms(_recorded_young_regions);
1844   _predicted_non_young_other_time_ms =
1845     predict_non_young_other_time_ms(_recorded_non_young_regions);
1846 
1847   _predicted_pause_time_ms =
1848     _predicted_rs_update_time_ms +
1849     _predicted_rs_scan_time_ms +
1850     _predicted_object_copy_time_ms +
1851     _predicted_constant_other_time_ms +
1852     _predicted_young_other_time_ms +
1853     _predicted_non_young_other_time_ms;
1854 #endif // PREDICTIONS_VERBOSE
1855 }
1856 
1857 void G1CollectorPolicy::check_if_region_is_too_expensive(double
1858                                                            predicted_time_ms) {
1859   // I don't think we need to do this when in young GC mode since
1860   // marking will be initiated next time we hit the soft limit anyway...
1861   if (predicted_time_ms > _expensive_region_limit_ms) {
1862     if (!in_young_gc_mode()) {
1863         set_full_young_gcs(true);
1864         // We might want to do something different here. However,
1865         // right now we don't support the non-generational G1 mode
1866         // (and in fact we are planning to remove the associated code,
1867         // see CR 6814390). So, let's leave it as is and this will be
1868         // removed some time in the future
1869         ShouldNotReachHere();
1870         set_during_initial_mark_pause();
1871     } else
1872       // no point in doing another partial one
1873       _should_revert_to_full_young_gcs = true;
1874   }
1875 }
1876 
1877 // </NEW PREDICTION>
1878 
1879 
1880 void G1CollectorPolicy::update_recent_gc_times(double end_time_sec,
1881                                                double elapsed_ms) {
1882   _recent_gc_times_ms->add(elapsed_ms);
1883   _recent_prev_end_times_for_all_gcs_sec->add(end_time_sec);
1884   _prev_collection_pause_end_ms = end_time_sec * 1000.0;
1885 }
1886 
1887 double G1CollectorPolicy::recent_avg_time_for_pauses_ms() {
1888   if (_recent_pause_times_ms->num() == 0) return (double) MaxGCPauseMillis;
1889   else return _recent_pause_times_ms->avg();
1890 }
1891 
1892 double G1CollectorPolicy::recent_avg_time_for_CH_strong_ms() {
1893   if (_recent_CH_strong_roots_times_ms->num() == 0)
1894     return (double)MaxGCPauseMillis/3.0;
1895   else return _recent_CH_strong_roots_times_ms->avg();
1896 }
1897 
1898 double G1CollectorPolicy::recent_avg_time_for_G1_strong_ms() {
1899   if (_recent_G1_strong_roots_times_ms->num() == 0)
1900     return (double)MaxGCPauseMillis/3.0;
1901   else return _recent_G1_strong_roots_times_ms->avg();
1902 }
1903 
1904 double G1CollectorPolicy::recent_avg_time_for_evac_ms() {
1905   if (_recent_evac_times_ms->num() == 0) return (double)MaxGCPauseMillis/3.0;
1906   else return _recent_evac_times_ms->avg();
1907 }
1908 
1909 int G1CollectorPolicy::number_of_recent_gcs() {
1910   assert(_recent_CH_strong_roots_times_ms->num() ==
1911          _recent_G1_strong_roots_times_ms->num(), "Sequence out of sync");
1912   assert(_recent_G1_strong_roots_times_ms->num() ==
1913          _recent_evac_times_ms->num(), "Sequence out of sync");
1914   assert(_recent_evac_times_ms->num() ==
1915          _recent_pause_times_ms->num(), "Sequence out of sync");
1916   assert(_recent_pause_times_ms->num() ==
1917          _recent_CS_bytes_used_before->num(), "Sequence out of sync");
1918   assert(_recent_CS_bytes_used_before->num() ==
1919          _recent_CS_bytes_surviving->num(), "Sequence out of sync");
1920   return _recent_pause_times_ms->num();
1921 }
1922 
1923 double G1CollectorPolicy::recent_avg_survival_fraction() {
1924   return recent_avg_survival_fraction_work(_recent_CS_bytes_surviving,
1925                                            _recent_CS_bytes_used_before);
1926 }
1927 
1928 double G1CollectorPolicy::last_survival_fraction() {
1929   return last_survival_fraction_work(_recent_CS_bytes_surviving,
1930                                      _recent_CS_bytes_used_before);
1931 }
1932 
1933 double
1934 G1CollectorPolicy::recent_avg_survival_fraction_work(TruncatedSeq* surviving,
1935                                                      TruncatedSeq* before) {
1936   assert(surviving->num() == before->num(), "Sequence out of sync");
1937   if (before->sum() > 0.0) {
1938       double recent_survival_rate = surviving->sum() / before->sum();
1939       // We exempt parallel collection from this check because Alloc Buffer
1940       // fragmentation can produce negative collections.
1941       // Further, we're now always doing parallel collection.  But I'm still
1942       // leaving this here as a placeholder for a more precise assertion later.
1943       // (DLD, 10/05.)
1944       assert((true || ParallelGCThreads > 0) ||
1945              _g1->evacuation_failed() ||
1946              recent_survival_rate <= 1.0, "Or bad frac");
1947       return recent_survival_rate;
1948   } else {
1949     return 1.0; // Be conservative.
1950   }
1951 }
1952 
1953 double
1954 G1CollectorPolicy::last_survival_fraction_work(TruncatedSeq* surviving,
1955                                                TruncatedSeq* before) {
1956   assert(surviving->num() == before->num(), "Sequence out of sync");
1957   if (surviving->num() > 0 && before->last() > 0.0) {
1958     double last_survival_rate = surviving->last() / before->last();
1959     // We exempt parallel collection from this check because Alloc Buffer
1960     // fragmentation can produce negative collections.
1961     // Further, we're now always doing parallel collection.  But I'm still
1962     // leaving this here as a placeholder for a more precise assertion later.
1963     // (DLD, 10/05.)
1964     assert((true || ParallelGCThreads > 0) ||
1965            last_survival_rate <= 1.0, "Or bad frac");
1966     return last_survival_rate;
1967   } else {
1968     return 1.0;
1969   }
1970 }
1971 
1972 static const int survival_min_obs = 5;
1973 static double survival_min_obs_limits[] = { 0.9, 0.7, 0.5, 0.3, 0.1 };
1974 static const double min_survival_rate = 0.1;
1975 
1976 double
1977 G1CollectorPolicy::conservative_avg_survival_fraction_work(double avg,
1978                                                            double latest) {
1979   double res = avg;
1980   if (number_of_recent_gcs() < survival_min_obs) {
1981     res = MAX2(res, survival_min_obs_limits[number_of_recent_gcs()]);
1982   }
1983   res = MAX2(res, latest);
1984   res = MAX2(res, min_survival_rate);
1985   // In the parallel case, LAB fragmentation can produce "negative
1986   // collections"; so can evac failure.  Cap at 1.0
1987   res = MIN2(res, 1.0);
1988   return res;
1989 }
1990 
1991 size_t G1CollectorPolicy::expansion_amount() {
1992   if ((recent_avg_pause_time_ratio() * 100.0) > _gc_overhead_perc) {
1993     // We will double the existing space, or take
1994     // G1ExpandByPercentOfAvailable % of the available expansion
1995     // space, whichever is smaller, bounded below by a minimum
1996     // expansion (unless that's all that's left.)
1997     const size_t min_expand_bytes = 1*M;
1998     size_t reserved_bytes = _g1->g1_reserved_obj_bytes();
1999     size_t committed_bytes = _g1->capacity();
2000     size_t uncommitted_bytes = reserved_bytes - committed_bytes;
2001     size_t expand_bytes;
2002     size_t expand_bytes_via_pct =
2003       uncommitted_bytes * G1ExpandByPercentOfAvailable / 100;
2004     expand_bytes = MIN2(expand_bytes_via_pct, committed_bytes);
2005     expand_bytes = MAX2(expand_bytes, min_expand_bytes);
2006     expand_bytes = MIN2(expand_bytes, uncommitted_bytes);
2007     if (G1PolicyVerbose > 1) {
2008       gclog_or_tty->print("Decided to expand: ratio = %5.2f, "
2009                  "committed = %d%s, uncommited = %d%s, via pct = %d%s.\n"
2010                  "                   Answer = %d.\n",
2011                  recent_avg_pause_time_ratio(),
2012                  byte_size_in_proper_unit(committed_bytes),
2013                  proper_unit_for_byte_size(committed_bytes),
2014                  byte_size_in_proper_unit(uncommitted_bytes),
2015                  proper_unit_for_byte_size(uncommitted_bytes),
2016                  byte_size_in_proper_unit(expand_bytes_via_pct),
2017                  proper_unit_for_byte_size(expand_bytes_via_pct),
2018                  byte_size_in_proper_unit(expand_bytes),
2019                  proper_unit_for_byte_size(expand_bytes));
2020     }
2021     return expand_bytes;
2022   } else {
2023     return 0;
2024   }
2025 }
2026 
2027 void G1CollectorPolicy::note_start_of_mark_thread() {
2028   _mark_thread_startup_sec = os::elapsedTime();
2029 }
2030 
2031 class CountCSClosure: public HeapRegionClosure {
2032   G1CollectorPolicy* _g1_policy;
2033 public:
2034   CountCSClosure(G1CollectorPolicy* g1_policy) :
2035     _g1_policy(g1_policy) {}
2036   bool doHeapRegion(HeapRegion* r) {
2037     _g1_policy->_bytes_in_collection_set_before_gc += r->used();
2038     return false;
2039   }
2040 };
2041 
2042 void G1CollectorPolicy::count_CS_bytes_used() {
2043   CountCSClosure cs_closure(this);
2044   _g1->collection_set_iterate(&cs_closure);
2045 }
2046 
2047 static void print_indent(int level) {
2048   for (int j = 0; j < level+1; ++j)
2049     gclog_or_tty->print("   ");
2050 }
2051 
2052 void G1CollectorPolicy::print_summary (int level,
2053                                        const char* str,
2054                                        NumberSeq* seq) const {
2055   double sum = seq->sum();
2056   print_indent(level);
2057   gclog_or_tty->print_cr("%-24s = %8.2lf s (avg = %8.2lf ms)",
2058                 str, sum / 1000.0, seq->avg());
2059 }
2060 
2061 void G1CollectorPolicy::print_summary_sd (int level,
2062                                           const char* str,
2063                                           NumberSeq* seq) const {
2064   print_summary(level, str, seq);
2065   print_indent(level + 5);
2066   gclog_or_tty->print_cr("(num = %5d, std dev = %8.2lf ms, max = %8.2lf ms)",
2067                 seq->num(), seq->sd(), seq->maximum());
2068 }
2069 
2070 void G1CollectorPolicy::check_other_times(int level,
2071                                         NumberSeq* other_times_ms,
2072                                         NumberSeq* calc_other_times_ms) const {
2073   bool should_print = false;
2074 
2075   double max_sum = MAX2(fabs(other_times_ms->sum()),
2076                         fabs(calc_other_times_ms->sum()));
2077   double min_sum = MIN2(fabs(other_times_ms->sum()),
2078                         fabs(calc_other_times_ms->sum()));
2079   double sum_ratio = max_sum / min_sum;
2080   if (sum_ratio > 1.1) {
2081     should_print = true;
2082     print_indent(level + 1);
2083     gclog_or_tty->print_cr("## CALCULATED OTHER SUM DOESN'T MATCH RECORDED ###");
2084   }
2085 
2086   double max_avg = MAX2(fabs(other_times_ms->avg()),
2087                         fabs(calc_other_times_ms->avg()));
2088   double min_avg = MIN2(fabs(other_times_ms->avg()),
2089                         fabs(calc_other_times_ms->avg()));
2090   double avg_ratio = max_avg / min_avg;
2091   if (avg_ratio > 1.1) {
2092     should_print = true;
2093     print_indent(level + 1);
2094     gclog_or_tty->print_cr("## CALCULATED OTHER AVG DOESN'T MATCH RECORDED ###");
2095   }
2096 
2097   if (other_times_ms->sum() < -0.01) {
2098     print_indent(level + 1);
2099     gclog_or_tty->print_cr("## RECORDED OTHER SUM IS NEGATIVE ###");
2100   }
2101 
2102   if (other_times_ms->avg() < -0.01) {
2103     print_indent(level + 1);
2104     gclog_or_tty->print_cr("## RECORDED OTHER AVG IS NEGATIVE ###");
2105   }
2106 
2107   if (calc_other_times_ms->sum() < -0.01) {
2108     should_print = true;
2109     print_indent(level + 1);
2110     gclog_or_tty->print_cr("## CALCULATED OTHER SUM IS NEGATIVE ###");
2111   }
2112 
2113   if (calc_other_times_ms->avg() < -0.01) {
2114     should_print = true;
2115     print_indent(level + 1);
2116     gclog_or_tty->print_cr("## CALCULATED OTHER AVG IS NEGATIVE ###");
2117   }
2118 
2119   if (should_print)
2120     print_summary(level, "Other(Calc)", calc_other_times_ms);
2121 }
2122 
2123 void G1CollectorPolicy::print_summary(PauseSummary* summary) const {
2124   bool parallel = ParallelGCThreads > 0;
2125   MainBodySummary*    body_summary = summary->main_body_summary();
2126   if (summary->get_total_seq()->num() > 0) {
2127     print_summary_sd(0, "Evacuation Pauses", summary->get_total_seq());
2128     if (body_summary != NULL) {
2129       print_summary(1, "SATB Drain", body_summary->get_satb_drain_seq());
2130       if (parallel) {
2131         print_summary(1, "Parallel Time", body_summary->get_parallel_seq());
2132         print_summary(2, "Update RS", body_summary->get_update_rs_seq());
2133         print_summary(2, "Ext Root Scanning",
2134                       body_summary->get_ext_root_scan_seq());
2135         print_summary(2, "Mark Stack Scanning",
2136                       body_summary->get_mark_stack_scan_seq());
2137         print_summary(2, "Scan RS", body_summary->get_scan_rs_seq());
2138         print_summary(2, "Object Copy", body_summary->get_obj_copy_seq());
2139         print_summary(2, "Termination", body_summary->get_termination_seq());
2140         print_summary(2, "Other", body_summary->get_parallel_other_seq());
2141         {
2142           NumberSeq* other_parts[] = {
2143             body_summary->get_update_rs_seq(),
2144             body_summary->get_ext_root_scan_seq(),
2145             body_summary->get_mark_stack_scan_seq(),
2146             body_summary->get_scan_rs_seq(),
2147             body_summary->get_obj_copy_seq(),
2148             body_summary->get_termination_seq()
2149           };
2150           NumberSeq calc_other_times_ms(body_summary->get_parallel_seq(),
2151                                         6, other_parts);
2152           check_other_times(2, body_summary->get_parallel_other_seq(),
2153                             &calc_other_times_ms);
2154         }
2155         print_summary(1, "Mark Closure", body_summary->get_mark_closure_seq());
2156         print_summary(1, "Clear CT", body_summary->get_clear_ct_seq());
2157       } else {
2158         print_summary(1, "Update RS", body_summary->get_update_rs_seq());
2159         print_summary(1, "Ext Root Scanning",
2160                       body_summary->get_ext_root_scan_seq());
2161         print_summary(1, "Mark Stack Scanning",
2162                       body_summary->get_mark_stack_scan_seq());
2163         print_summary(1, "Scan RS", body_summary->get_scan_rs_seq());
2164         print_summary(1, "Object Copy", body_summary->get_obj_copy_seq());
2165       }
2166     }
2167     print_summary(1, "Other", summary->get_other_seq());
2168     {
2169       if (body_summary != NULL) {
2170         NumberSeq calc_other_times_ms;
2171         if (parallel) {
2172           // parallel
2173           NumberSeq* other_parts[] = {
2174             body_summary->get_satb_drain_seq(),
2175             body_summary->get_parallel_seq(),
2176             body_summary->get_clear_ct_seq()
2177           };
2178           calc_other_times_ms = NumberSeq(summary->get_total_seq(),
2179                                                 3, other_parts);
2180         } else {
2181           // serial
2182           NumberSeq* other_parts[] = {
2183             body_summary->get_satb_drain_seq(),
2184             body_summary->get_update_rs_seq(),
2185             body_summary->get_ext_root_scan_seq(),
2186             body_summary->get_mark_stack_scan_seq(),
2187             body_summary->get_scan_rs_seq(),
2188             body_summary->get_obj_copy_seq()
2189           };
2190           calc_other_times_ms = NumberSeq(summary->get_total_seq(),
2191                                                 6, other_parts);
2192         }
2193         check_other_times(1,  summary->get_other_seq(), &calc_other_times_ms);
2194       }
2195     }
2196   } else {
2197     print_indent(0);
2198     gclog_or_tty->print_cr("none");
2199   }
2200   gclog_or_tty->print_cr("");
2201 }
2202 
2203 void G1CollectorPolicy::print_tracing_info() const {
2204   if (TraceGen0Time) {
2205     gclog_or_tty->print_cr("ALL PAUSES");
2206     print_summary_sd(0, "Total", _all_pause_times_ms);
2207     gclog_or_tty->print_cr("");
2208     gclog_or_tty->print_cr("");
2209     gclog_or_tty->print_cr("   Full Young GC Pauses:    %8d", _full_young_pause_num);
2210     gclog_or_tty->print_cr("   Partial Young GC Pauses: %8d", _partial_young_pause_num);
2211     gclog_or_tty->print_cr("");
2212 
2213     gclog_or_tty->print_cr("EVACUATION PAUSES");
2214     print_summary(_summary);
2215 
2216     gclog_or_tty->print_cr("MISC");
2217     print_summary_sd(0, "Stop World", _all_stop_world_times_ms);
2218     print_summary_sd(0, "Yields", _all_yield_times_ms);
2219     for (int i = 0; i < _aux_num; ++i) {
2220       if (_all_aux_times_ms[i].num() > 0) {
2221         char buffer[96];
2222         sprintf(buffer, "Aux%d", i);
2223         print_summary_sd(0, buffer, &_all_aux_times_ms[i]);
2224       }
2225     }
2226 
2227     size_t all_region_num = _region_num_young + _region_num_tenured;
2228     gclog_or_tty->print_cr("   New Regions %8d, Young %8d (%6.2lf%%), "
2229                "Tenured %8d (%6.2lf%%)",
2230                all_region_num,
2231                _region_num_young,
2232                (double) _region_num_young / (double) all_region_num * 100.0,
2233                _region_num_tenured,
2234                (double) _region_num_tenured / (double) all_region_num * 100.0);
2235   }
2236   if (TraceGen1Time) {
2237     if (_all_full_gc_times_ms->num() > 0) {
2238       gclog_or_tty->print("\n%4d full_gcs: total time = %8.2f s",
2239                  _all_full_gc_times_ms->num(),
2240                  _all_full_gc_times_ms->sum() / 1000.0);
2241       gclog_or_tty->print_cr(" (avg = %8.2fms).", _all_full_gc_times_ms->avg());
2242       gclog_or_tty->print_cr("                     [std. dev = %8.2f ms, max = %8.2f ms]",
2243                     _all_full_gc_times_ms->sd(),
2244                     _all_full_gc_times_ms->maximum());
2245     }
2246   }
2247 }
2248 
2249 void G1CollectorPolicy::print_yg_surv_rate_info() const {
2250 #ifndef PRODUCT
2251   _short_lived_surv_rate_group->print_surv_rate_summary();
2252   // add this call for any other surv rate groups
2253 #endif // PRODUCT
2254 }
2255 
2256 bool
2257 G1CollectorPolicy::should_add_next_region_to_young_list() {
2258   assert(in_young_gc_mode(), "should be in young GC mode");
2259   bool ret;
2260   size_t young_list_length = _g1->young_list()->length();
2261   size_t young_list_max_length = _young_list_target_length;
2262   if (G1FixedEdenSize) {
2263     young_list_max_length -= _max_survivor_regions;
2264   }
2265   if (young_list_length < young_list_max_length) {
2266     ret = true;
2267     ++_region_num_young;
2268   } else {
2269     ret = false;
2270     ++_region_num_tenured;
2271   }
2272 
2273   return ret;
2274 }
2275 
2276 #ifndef PRODUCT
2277 // for debugging, bit of a hack...
2278 static char*
2279 region_num_to_mbs(int length) {
2280   static char buffer[64];
2281   double bytes = (double) (length * HeapRegion::GrainBytes);
2282   double mbs = bytes / (double) (1024 * 1024);
2283   sprintf(buffer, "%7.2lfMB", mbs);
2284   return buffer;
2285 }
2286 #endif // PRODUCT
2287 
2288 size_t G1CollectorPolicy::max_regions(int purpose) {
2289   switch (purpose) {
2290     case GCAllocForSurvived:
2291       return _max_survivor_regions;
2292     case GCAllocForTenured:
2293       return REGIONS_UNLIMITED;
2294     default:
2295       ShouldNotReachHere();
2296       return REGIONS_UNLIMITED;
2297   };
2298 }
2299 
2300 // Calculates survivor space parameters.
2301 void G1CollectorPolicy::calculate_survivors_policy()
2302 {
2303   if (G1FixedSurvivorSpaceSize == 0) {
2304     _max_survivor_regions = _young_list_target_length / SurvivorRatio;
2305   } else {
2306     _max_survivor_regions = G1FixedSurvivorSpaceSize / HeapRegion::GrainBytes;
2307   }
2308 
2309   if (G1FixedTenuringThreshold) {
2310     _tenuring_threshold = MaxTenuringThreshold;
2311   } else {
2312     _tenuring_threshold = _survivors_age_table.compute_tenuring_threshold(
2313         HeapRegion::GrainWords * _max_survivor_regions);
2314   }
2315 }
2316 
2317 bool
2318 G1CollectorPolicy_BestRegionsFirst::should_do_collection_pause(size_t
2319                                                                word_size) {
2320   assert(_g1->regions_accounted_for(), "Region leakage!");
2321   double max_pause_time_ms = _mmu_tracker->max_gc_time() * 1000.0;
2322 
2323   size_t young_list_length = _g1->young_list()->length();
2324   size_t young_list_max_length = _young_list_target_length;
2325   if (G1FixedEdenSize) {
2326     young_list_max_length -= _max_survivor_regions;
2327   }
2328   bool reached_target_length = young_list_length >= young_list_max_length;
2329 
2330   if (in_young_gc_mode()) {
2331     if (reached_target_length) {
2332       assert( young_list_length > 0 && _g1->young_list()->length() > 0,
2333               "invariant" );
2334       return true;
2335     }
2336   } else {
2337     guarantee( false, "should not reach here" );
2338   }
2339 
2340   return false;
2341 }
2342 
2343 #ifndef PRODUCT
2344 class HRSortIndexIsOKClosure: public HeapRegionClosure {
2345   CollectionSetChooser* _chooser;
2346 public:
2347   HRSortIndexIsOKClosure(CollectionSetChooser* chooser) :
2348     _chooser(chooser) {}
2349 
2350   bool doHeapRegion(HeapRegion* r) {
2351     if (!r->continuesHumongous()) {
2352       assert(_chooser->regionProperlyOrdered(r), "Ought to be.");
2353     }
2354     return false;
2355   }
2356 };
2357 
2358 bool G1CollectorPolicy_BestRegionsFirst::assertMarkedBytesDataOK() {
2359   HRSortIndexIsOKClosure cl(_collectionSetChooser);
2360   _g1->heap_region_iterate(&cl);
2361   return true;
2362 }
2363 #endif
2364 
2365 bool
2366 G1CollectorPolicy::force_initial_mark_if_outside_cycle() {
2367   bool during_cycle = _g1->concurrent_mark()->cmThread()->during_cycle();
2368   if (!during_cycle) {
2369     set_initiate_conc_mark_if_possible();
2370     return true;
2371   } else {
2372     return false;
2373   }
2374 }
2375 
2376 void
2377 G1CollectorPolicy::decide_on_conc_mark_initiation() {
2378   // We are about to decide on whether this pause will be an
2379   // initial-mark pause.
2380 
2381   // First, during_initial_mark_pause() should not be already set. We
2382   // will set it here if we have to. However, it should be cleared by
2383   // the end of the pause (it's only set for the duration of an
2384   // initial-mark pause).
2385   assert(!during_initial_mark_pause(), "pre-condition");
2386 
2387   if (initiate_conc_mark_if_possible()) {
2388     // We had noticed on a previous pause that the heap occupancy has
2389     // gone over the initiating threshold and we should start a
2390     // concurrent marking cycle. So we might initiate one.
2391 
2392     bool during_cycle = _g1->concurrent_mark()->cmThread()->during_cycle();
2393     if (!during_cycle) {
2394       // The concurrent marking thread is not "during a cycle", i.e.,
2395       // it has completed the last one. So we can go ahead and
2396       // initiate a new cycle.
2397 
2398       set_during_initial_mark_pause();
2399 
2400       // And we can now clear initiate_conc_mark_if_possible() as
2401       // we've already acted on it.
2402       clear_initiate_conc_mark_if_possible();
2403     } else {
2404       // The concurrent marking thread is still finishing up the
2405       // previous cycle. If we start one right now the two cycles
2406       // overlap. In particular, the concurrent marking thread might
2407       // be in the process of clearing the next marking bitmap (which
2408       // we will use for the next cycle if we start one). Starting a
2409       // cycle now will be bad given that parts of the marking
2410       // information might get cleared by the marking thread. And we
2411       // cannot wait for the marking thread to finish the cycle as it
2412       // periodically yields while clearing the next marking bitmap
2413       // and, if it's in a yield point, it's waiting for us to
2414       // finish. So, at this point we will not start a cycle and we'll
2415       // let the concurrent marking thread complete the last one.
2416     }
2417   }
2418 }
2419 
2420 void
2421 G1CollectorPolicy_BestRegionsFirst::
2422 record_collection_pause_start(double start_time_sec, size_t start_used) {
2423   G1CollectorPolicy::record_collection_pause_start(start_time_sec, start_used);
2424 }
2425 
2426 class NextNonCSElemFinder: public HeapRegionClosure {
2427   HeapRegion* _res;
2428 public:
2429   NextNonCSElemFinder(): _res(NULL) {}
2430   bool doHeapRegion(HeapRegion* r) {
2431     if (!r->in_collection_set()) {
2432       _res = r;
2433       return true;
2434     } else {
2435       return false;
2436     }
2437   }
2438   HeapRegion* res() { return _res; }
2439 };
2440 
2441 class KnownGarbageClosure: public HeapRegionClosure {
2442   CollectionSetChooser* _hrSorted;
2443 
2444 public:
2445   KnownGarbageClosure(CollectionSetChooser* hrSorted) :
2446     _hrSorted(hrSorted)
2447   {}
2448 
2449   bool doHeapRegion(HeapRegion* r) {
2450     // We only include humongous regions in collection
2451     // sets when concurrent mark shows that their contained object is
2452     // unreachable.
2453 
2454     // Do we have any marking information for this region?
2455     if (r->is_marked()) {
2456       // We don't include humongous regions in collection
2457       // sets because we collect them immediately at the end of a marking
2458       // cycle.  We also don't include young regions because we *must*
2459       // include them in the next collection pause.
2460       if (!r->isHumongous() && !r->is_young()) {
2461         _hrSorted->addMarkedHeapRegion(r);
2462       }
2463     }
2464     return false;
2465   }
2466 };
2467 
2468 class ParKnownGarbageHRClosure: public HeapRegionClosure {
2469   CollectionSetChooser* _hrSorted;
2470   jint _marked_regions_added;
2471   jint _chunk_size;
2472   jint _cur_chunk_idx;
2473   jint _cur_chunk_end; // Cur chunk [_cur_chunk_idx, _cur_chunk_end)
2474   int _worker;
2475   int _invokes;
2476 
2477   void get_new_chunk() {
2478     _cur_chunk_idx = _hrSorted->getParMarkedHeapRegionChunk(_chunk_size);
2479     _cur_chunk_end = _cur_chunk_idx + _chunk_size;
2480   }
2481   void add_region(HeapRegion* r) {
2482     if (_cur_chunk_idx == _cur_chunk_end) {
2483       get_new_chunk();
2484     }
2485     assert(_cur_chunk_idx < _cur_chunk_end, "postcondition");
2486     _hrSorted->setMarkedHeapRegion(_cur_chunk_idx, r);
2487     _marked_regions_added++;
2488     _cur_chunk_idx++;
2489   }
2490 
2491 public:
2492   ParKnownGarbageHRClosure(CollectionSetChooser* hrSorted,
2493                            jint chunk_size,
2494                            int worker) :
2495     _hrSorted(hrSorted), _chunk_size(chunk_size), _worker(worker),
2496     _marked_regions_added(0), _cur_chunk_idx(0), _cur_chunk_end(0),
2497     _invokes(0)
2498   {}
2499 
2500   bool doHeapRegion(HeapRegion* r) {
2501     // We only include humongous regions in collection
2502     // sets when concurrent mark shows that their contained object is
2503     // unreachable.
2504     _invokes++;
2505 
2506     // Do we have any marking information for this region?
2507     if (r->is_marked()) {
2508       // We don't include humongous regions in collection
2509       // sets because we collect them immediately at the end of a marking
2510       // cycle.
2511       // We also do not include young regions in collection sets
2512       if (!r->isHumongous() && !r->is_young()) {
2513         add_region(r);
2514       }
2515     }
2516     return false;
2517   }
2518   jint marked_regions_added() { return _marked_regions_added; }
2519   int invokes() { return _invokes; }
2520 };
2521 
2522 class ParKnownGarbageTask: public AbstractGangTask {
2523   CollectionSetChooser* _hrSorted;
2524   jint _chunk_size;
2525   G1CollectedHeap* _g1;
2526 public:
2527   ParKnownGarbageTask(CollectionSetChooser* hrSorted, jint chunk_size) :
2528     AbstractGangTask("ParKnownGarbageTask"),
2529     _hrSorted(hrSorted), _chunk_size(chunk_size),
2530     _g1(G1CollectedHeap::heap())
2531   {}
2532 
2533   void work(int i) {
2534     ParKnownGarbageHRClosure parKnownGarbageCl(_hrSorted, _chunk_size, i);
2535     // Back to zero for the claim value.
2536     _g1->heap_region_par_iterate_chunked(&parKnownGarbageCl, i,
2537                                          HeapRegion::InitialClaimValue);
2538     jint regions_added = parKnownGarbageCl.marked_regions_added();
2539     _hrSorted->incNumMarkedHeapRegions(regions_added);
2540     if (G1PrintParCleanupStats) {
2541       gclog_or_tty->print("     Thread %d called %d times, added %d regions to list.\n",
2542                  i, parKnownGarbageCl.invokes(), regions_added);
2543     }
2544   }
2545 };
2546 
2547 void
2548 G1CollectorPolicy_BestRegionsFirst::
2549 record_concurrent_mark_cleanup_end(size_t freed_bytes,
2550                                    size_t max_live_bytes) {
2551   double start;
2552   if (G1PrintParCleanupStats) start = os::elapsedTime();
2553   record_concurrent_mark_cleanup_end_work1(freed_bytes, max_live_bytes);
2554 
2555   _collectionSetChooser->clearMarkedHeapRegions();
2556   double clear_marked_end;
2557   if (G1PrintParCleanupStats) {
2558     clear_marked_end = os::elapsedTime();
2559     gclog_or_tty->print_cr("  clear marked regions + work1: %8.3f ms.",
2560                   (clear_marked_end - start)*1000.0);
2561   }
2562   if (ParallelGCThreads > 0) {
2563     const size_t OverpartitionFactor = 4;
2564     const size_t MinWorkUnit = 8;
2565     const size_t WorkUnit =
2566       MAX2(_g1->n_regions() / (ParallelGCThreads * OverpartitionFactor),
2567            MinWorkUnit);
2568     _collectionSetChooser->prepareForAddMarkedHeapRegionsPar(_g1->n_regions(),
2569                                                              WorkUnit);
2570     ParKnownGarbageTask parKnownGarbageTask(_collectionSetChooser,
2571                                             (int) WorkUnit);
2572     _g1->workers()->run_task(&parKnownGarbageTask);
2573 
2574     assert(_g1->check_heap_region_claim_values(HeapRegion::InitialClaimValue),
2575            "sanity check");
2576   } else {
2577     KnownGarbageClosure knownGarbagecl(_collectionSetChooser);
2578     _g1->heap_region_iterate(&knownGarbagecl);
2579   }
2580   double known_garbage_end;
2581   if (G1PrintParCleanupStats) {
2582     known_garbage_end = os::elapsedTime();
2583     gclog_or_tty->print_cr("  compute known garbage: %8.3f ms.",
2584                   (known_garbage_end - clear_marked_end)*1000.0);
2585   }
2586   _collectionSetChooser->sortMarkedHeapRegions();
2587   double sort_end;
2588   if (G1PrintParCleanupStats) {
2589     sort_end = os::elapsedTime();
2590     gclog_or_tty->print_cr("  sorting: %8.3f ms.",
2591                   (sort_end - known_garbage_end)*1000.0);
2592   }
2593 
2594   record_concurrent_mark_cleanup_end_work2();
2595   double work2_end;
2596   if (G1PrintParCleanupStats) {
2597     work2_end = os::elapsedTime();
2598     gclog_or_tty->print_cr("  work2: %8.3f ms.",
2599                   (work2_end - sort_end)*1000.0);
2600   }
2601 }
2602 
2603 // Add the heap region at the head of the non-incremental collection set
2604 void G1CollectorPolicy::
2605 add_to_collection_set(HeapRegion* hr) {
2606   assert(_inc_cset_build_state == Active, "Precondition");
2607   assert(!hr->is_young(), "non-incremental add of young region");
2608 
2609   if (G1PrintHeapRegions) {
2610     gclog_or_tty->print_cr("added region to cset "
2611                            "%d:["PTR_FORMAT", "PTR_FORMAT"], "
2612                            "top "PTR_FORMAT", %s",
2613                            hr->hrs_index(), hr->bottom(), hr->end(),
2614                            hr->top(), hr->is_young() ? "YOUNG" : "NOT_YOUNG");
2615   }
2616 
2617   if (_g1->mark_in_progress())
2618     _g1->concurrent_mark()->registerCSetRegion(hr);
2619 
2620   assert(!hr->in_collection_set(), "should not already be in the CSet");
2621   hr->set_in_collection_set(true);
2622   hr->set_next_in_collection_set(_collection_set);
2623   _collection_set = hr;
2624   _collection_set_size++;
2625   _collection_set_bytes_used_before += hr->used();
2626   _g1->register_region_with_in_cset_fast_test(hr);
2627 }
2628 
2629 // Initialize the per-collection-set information
2630 void G1CollectorPolicy::start_incremental_cset_building() {
2631   assert(_inc_cset_build_state == Inactive, "Precondition");
2632 
2633   _inc_cset_head = NULL;
2634   _inc_cset_tail = NULL;
2635   _inc_cset_size = 0;
2636   _inc_cset_bytes_used_before = 0;
2637 
2638   if (in_young_gc_mode()) {
2639     _inc_cset_young_index = 0;
2640   }
2641 
2642   _inc_cset_max_finger = 0;
2643   _inc_cset_recorded_young_bytes = 0;
2644   _inc_cset_recorded_rs_lengths = 0;
2645   _inc_cset_predicted_elapsed_time_ms = 0;
2646   _inc_cset_predicted_bytes_to_copy = 0;
2647   _inc_cset_build_state = Active;
2648 }
2649 
2650 void G1CollectorPolicy::add_to_incremental_cset_info(HeapRegion* hr, size_t rs_length) {
2651   // This routine is used when:
2652   // * adding survivor regions to the incremental cset at the end of an
2653   //   evacuation pause,
2654   // * adding the current allocation region to the incremental cset
2655   //   when it is retired, and
2656   // * updating existing policy information for a region in the
2657   //   incremental cset via young list RSet sampling.
2658   // Therefore this routine may be called at a safepoint by the
2659   // VM thread, or in-between safepoints by mutator threads (when
2660   // retiring the current allocation region) or a concurrent
2661   // refine thread (RSet sampling).
2662 
2663   double region_elapsed_time_ms = predict_region_elapsed_time_ms(hr, true);
2664   size_t used_bytes = hr->used();
2665 
2666   _inc_cset_recorded_rs_lengths += rs_length;
2667   _inc_cset_predicted_elapsed_time_ms += region_elapsed_time_ms;
2668 
2669   _inc_cset_bytes_used_before += used_bytes;
2670 
2671   // Cache the values we have added to the aggregated informtion
2672   // in the heap region in case we have to remove this region from
2673   // the incremental collection set, or it is updated by the
2674   // rset sampling code
2675   hr->set_recorded_rs_length(rs_length);
2676   hr->set_predicted_elapsed_time_ms(region_elapsed_time_ms);
2677 
2678 #if PREDICTIONS_VERBOSE
2679   size_t bytes_to_copy = predict_bytes_to_copy(hr);
2680   _inc_cset_predicted_bytes_to_copy += bytes_to_copy;
2681 
2682   // Record the number of bytes used in this region
2683   _inc_cset_recorded_young_bytes += used_bytes;
2684 
2685   // Cache the values we have added to the aggregated informtion
2686   // in the heap region in case we have to remove this region from
2687   // the incremental collection set, or it is updated by the
2688   // rset sampling code
2689   hr->set_predicted_bytes_to_copy(bytes_to_copy);
2690 #endif // PREDICTIONS_VERBOSE
2691 }
2692 
2693 void G1CollectorPolicy::remove_from_incremental_cset_info(HeapRegion* hr) {
2694   // This routine is currently only called as part of the updating of
2695   // existing policy information for regions in the incremental cset that
2696   // is performed by the concurrent refine thread(s) as part of young list
2697   // RSet sampling. Therefore we should not be at a safepoint.
2698 
2699   assert(!SafepointSynchronize::is_at_safepoint(), "should not be at safepoint");
2700   assert(hr->is_young(), "it should be");
2701 
2702   size_t used_bytes = hr->used();
2703   size_t old_rs_length = hr->recorded_rs_length();
2704   double old_elapsed_time_ms = hr->predicted_elapsed_time_ms();
2705 
2706   // Subtract the old recorded/predicted policy information for
2707   // the given heap region from the collection set info.
2708   _inc_cset_recorded_rs_lengths -= old_rs_length;
2709   _inc_cset_predicted_elapsed_time_ms -= old_elapsed_time_ms;
2710 
2711   _inc_cset_bytes_used_before -= used_bytes;
2712 
2713   // Clear the values cached in the heap region
2714   hr->set_recorded_rs_length(0);
2715   hr->set_predicted_elapsed_time_ms(0);
2716 
2717 #if PREDICTIONS_VERBOSE
2718   size_t old_predicted_bytes_to_copy = hr->predicted_bytes_to_copy();
2719   _inc_cset_predicted_bytes_to_copy -= old_predicted_bytes_to_copy;
2720 
2721   // Subtract the number of bytes used in this region
2722   _inc_cset_recorded_young_bytes -= used_bytes;
2723 
2724   // Clear the values cached in the heap region
2725   hr->set_predicted_bytes_to_copy(0);
2726 #endif // PREDICTIONS_VERBOSE
2727 }
2728 
2729 void G1CollectorPolicy::update_incremental_cset_info(HeapRegion* hr, size_t new_rs_length) {
2730   // Update the collection set information that is dependent on the new RS length
2731   assert(hr->is_young(), "Precondition");
2732 
2733   remove_from_incremental_cset_info(hr);
2734   add_to_incremental_cset_info(hr, new_rs_length);
2735 }
2736 
2737 void G1CollectorPolicy::add_region_to_incremental_cset_common(HeapRegion* hr) {
2738   assert( hr->is_young(), "invariant");
2739   assert( hr->young_index_in_cset() == -1, "invariant" );
2740   assert(_inc_cset_build_state == Active, "Precondition");
2741 
2742   // We need to clear and set the cached recorded/cached collection set
2743   // information in the heap region here (before the region gets added
2744   // to the collection set). An individual heap region's cached values
2745   // are calculated, aggregated with the policy collection set info,
2746   // and cached in the heap region here (initially) and (subsequently)
2747   // by the Young List sampling code.
2748 
2749   size_t rs_length = hr->rem_set()->occupied();
2750   add_to_incremental_cset_info(hr, rs_length);
2751 
2752   HeapWord* hr_end = hr->end();
2753   _inc_cset_max_finger = MAX2(_inc_cset_max_finger, hr_end);
2754 
2755   assert(!hr->in_collection_set(), "invariant");
2756   hr->set_in_collection_set(true);
2757   assert( hr->next_in_collection_set() == NULL, "invariant");
2758 
2759   _inc_cset_size++;
2760   _g1->register_region_with_in_cset_fast_test(hr);
2761 
2762   hr->set_young_index_in_cset((int) _inc_cset_young_index);
2763   ++_inc_cset_young_index;
2764 }
2765 
2766 // Add the region at the RHS of the incremental cset
2767 void G1CollectorPolicy::add_region_to_incremental_cset_rhs(HeapRegion* hr) {
2768   // We should only ever be appending survivors at the end of a pause
2769   assert( hr->is_survivor(), "Logic");
2770 
2771   // Do the 'common' stuff
2772   add_region_to_incremental_cset_common(hr);
2773 
2774   // Now add the region at the right hand side
2775   if (_inc_cset_tail == NULL) {
2776     assert(_inc_cset_head == NULL, "invariant");
2777     _inc_cset_head = hr;
2778   } else {
2779     _inc_cset_tail->set_next_in_collection_set(hr);
2780   }
2781   _inc_cset_tail = hr;
2782 
2783   if (G1PrintHeapRegions) {
2784     gclog_or_tty->print_cr(" added region to incremental cset (RHS) "
2785                   "%d:["PTR_FORMAT", "PTR_FORMAT"], "
2786                   "top "PTR_FORMAT", young %s",
2787                   hr->hrs_index(), hr->bottom(), hr->end(),
2788                   hr->top(), (hr->is_young()) ? "YES" : "NO");
2789   }
2790 }
2791 
2792 // Add the region to the LHS of the incremental cset
2793 void G1CollectorPolicy::add_region_to_incremental_cset_lhs(HeapRegion* hr) {
2794   // Survivors should be added to the RHS at the end of a pause
2795   assert(!hr->is_survivor(), "Logic");
2796 
2797   // Do the 'common' stuff
2798   add_region_to_incremental_cset_common(hr);
2799 
2800   // Add the region at the left hand side
2801   hr->set_next_in_collection_set(_inc_cset_head);
2802   if (_inc_cset_head == NULL) {
2803     assert(_inc_cset_tail == NULL, "Invariant");
2804     _inc_cset_tail = hr;
2805   }
2806   _inc_cset_head = hr;
2807 
2808   if (G1PrintHeapRegions) {
2809     gclog_or_tty->print_cr(" added region to incremental cset (LHS) "
2810                   "%d:["PTR_FORMAT", "PTR_FORMAT"], "
2811                   "top "PTR_FORMAT", young %s",
2812                   hr->hrs_index(), hr->bottom(), hr->end(),
2813                   hr->top(), (hr->is_young()) ? "YES" : "NO");
2814   }
2815 }
2816 
2817 #ifndef PRODUCT
2818 void G1CollectorPolicy::print_collection_set(HeapRegion* list_head, outputStream* st) {
2819   assert(list_head == inc_cset_head() || list_head == collection_set(), "must be");
2820 
2821   st->print_cr("\nCollection_set:");
2822   HeapRegion* csr = list_head;
2823   while (csr != NULL) {
2824     HeapRegion* next = csr->next_in_collection_set();
2825     assert(csr->in_collection_set(), "bad CS");
2826     st->print_cr("  [%08x-%08x], t: %08x, P: %08x, N: %08x, C: %08x, "
2827                  "age: %4d, y: %d, surv: %d",
2828                         csr->bottom(), csr->end(),
2829                         csr->top(),
2830                         csr->prev_top_at_mark_start(),
2831                         csr->next_top_at_mark_start(),
2832                         csr->top_at_conc_mark_count(),
2833                         csr->age_in_surv_rate_group_cond(),
2834                         csr->is_young(),
2835                         csr->is_survivor());
2836     csr = next;
2837   }
2838 }
2839 #endif // !PRODUCT
2840 
2841 void
2842 G1CollectorPolicy_BestRegionsFirst::choose_collection_set(
2843                                                   double target_pause_time_ms) {
2844   // Set this here - in case we're not doing young collections.
2845   double non_young_start_time_sec = os::elapsedTime();
2846 
2847   start_recording_regions();
2848 
2849   guarantee(target_pause_time_ms > 0.0,
2850             err_msg("target_pause_time_ms = %1.6lf should be positive",
2851                     target_pause_time_ms));
2852   guarantee(_collection_set == NULL, "Precondition");
2853 
2854   double base_time_ms = predict_base_elapsed_time_ms(_pending_cards);
2855   double predicted_pause_time_ms = base_time_ms;
2856 
2857   double time_remaining_ms = target_pause_time_ms - base_time_ms;
2858 
2859   // the 10% and 50% values are arbitrary...
2860   if (time_remaining_ms < 0.10 * target_pause_time_ms) {
2861     time_remaining_ms = 0.50 * target_pause_time_ms;
2862     _within_target = false;
2863   } else {
2864     _within_target = true;
2865   }
2866 
2867   // We figure out the number of bytes available for future to-space.
2868   // For new regions without marking information, we must assume the
2869   // worst-case of complete survival.  If we have marking information for a
2870   // region, we can bound the amount of live data.  We can add a number of
2871   // such regions, as long as the sum of the live data bounds does not
2872   // exceed the available evacuation space.
2873   size_t max_live_bytes = _g1->free_regions() * HeapRegion::GrainBytes;
2874 
2875   size_t expansion_bytes =
2876     _g1->expansion_regions() * HeapRegion::GrainBytes;
2877 
2878   _collection_set_bytes_used_before = 0;
2879   _collection_set_size = 0;
2880 
2881   // Adjust for expansion and slop.
2882   max_live_bytes = max_live_bytes + expansion_bytes;
2883 
2884   assert(_g1->regions_accounted_for(), "Region leakage!");
2885 
2886   HeapRegion* hr;
2887   if (in_young_gc_mode()) {
2888     double young_start_time_sec = os::elapsedTime();
2889 
2890     if (G1PolicyVerbose > 0) {
2891       gclog_or_tty->print_cr("Adding %d young regions to the CSet",
2892                     _g1->young_list()->length());
2893     }
2894 
2895     _young_cset_length  = 0;
2896     _last_young_gc_full = full_young_gcs() ? true : false;
2897 
2898     if (_last_young_gc_full)
2899       ++_full_young_pause_num;
2900     else
2901       ++_partial_young_pause_num;
2902 
2903     // The young list is laid with the survivor regions from the previous
2904     // pause are appended to the RHS of the young list, i.e.
2905     //   [Newly Young Regions ++ Survivors from last pause].
2906 
2907     hr = _g1->young_list()->first_survivor_region();
2908     while (hr != NULL) {
2909       assert(hr->is_survivor(), "badly formed young list");
2910       hr->set_young();
2911       hr = hr->get_next_young_region();
2912     }
2913 
2914     // Clear the fields that point to the survivor list - they are
2915     // all young now.
2916     _g1->young_list()->clear_survivors();
2917 
2918     if (_g1->mark_in_progress())
2919       _g1->concurrent_mark()->register_collection_set_finger(_inc_cset_max_finger);
2920 
2921     _young_cset_length = _inc_cset_young_index;
2922     _collection_set = _inc_cset_head;
2923     _collection_set_size = _inc_cset_size;
2924     _collection_set_bytes_used_before = _inc_cset_bytes_used_before;
2925 
2926     // For young regions in the collection set, we assume the worst
2927     // case of complete survival
2928     max_live_bytes -= _inc_cset_size * HeapRegion::GrainBytes;
2929 
2930     time_remaining_ms -= _inc_cset_predicted_elapsed_time_ms;
2931     predicted_pause_time_ms += _inc_cset_predicted_elapsed_time_ms;
2932 
2933     // The number of recorded young regions is the incremental
2934     // collection set's current size
2935     set_recorded_young_regions(_inc_cset_size);
2936     set_recorded_rs_lengths(_inc_cset_recorded_rs_lengths);
2937     set_recorded_young_bytes(_inc_cset_recorded_young_bytes);
2938 #if PREDICTIONS_VERBOSE
2939     set_predicted_bytes_to_copy(_inc_cset_predicted_bytes_to_copy);
2940 #endif // PREDICTIONS_VERBOSE
2941 
2942     if (G1PolicyVerbose > 0) {
2943       gclog_or_tty->print_cr("  Added " PTR_FORMAT " Young Regions to CS.",
2944                              _inc_cset_size);
2945       gclog_or_tty->print_cr("    (" SIZE_FORMAT " KB left in heap.)",
2946                             max_live_bytes/K);
2947     }
2948 
2949     assert(_inc_cset_size == _g1->young_list()->length(), "Invariant");
2950 
2951     double young_end_time_sec = os::elapsedTime();
2952     _recorded_young_cset_choice_time_ms =
2953       (young_end_time_sec - young_start_time_sec) * 1000.0;
2954 
2955     // We are doing young collections so reset this.
2956     non_young_start_time_sec = young_end_time_sec;
2957 
2958     // Note we can use either _collection_set_size or
2959     // _young_cset_length here
2960     if (_collection_set_size > 0 && _last_young_gc_full) {
2961       // don't bother adding more regions...
2962       goto choose_collection_set_end;
2963     }
2964   }
2965 
2966   if (!in_young_gc_mode() || !full_young_gcs()) {
2967     bool should_continue = true;
2968     NumberSeq seq;
2969     double avg_prediction = 100000000000000000.0; // something very large
2970 
2971     do {
2972       hr = _collectionSetChooser->getNextMarkedRegion(time_remaining_ms,
2973                                                       avg_prediction);
2974       if (hr != NULL) {
2975         double predicted_time_ms = predict_region_elapsed_time_ms(hr, false);
2976         time_remaining_ms -= predicted_time_ms;
2977         predicted_pause_time_ms += predicted_time_ms;
2978         add_to_collection_set(hr);
2979         record_non_young_cset_region(hr);
2980         max_live_bytes -= MIN2(hr->max_live_bytes(), max_live_bytes);
2981         if (G1PolicyVerbose > 0) {
2982           gclog_or_tty->print_cr("    (" SIZE_FORMAT " KB left in heap.)",
2983                         max_live_bytes/K);
2984         }
2985         seq.add(predicted_time_ms);
2986         avg_prediction = seq.avg() + seq.sd();
2987       }
2988       should_continue =
2989         ( hr != NULL) &&
2990         ( (adaptive_young_list_length()) ? time_remaining_ms > 0.0
2991           : _collection_set_size < _young_list_fixed_length );
2992     } while (should_continue);
2993 
2994     if (!adaptive_young_list_length() &&
2995         _collection_set_size < _young_list_fixed_length)
2996       _should_revert_to_full_young_gcs  = true;
2997   }
2998 
2999 choose_collection_set_end:
3000   stop_incremental_cset_building();
3001 
3002   count_CS_bytes_used();
3003 
3004   end_recording_regions();
3005 
3006   double non_young_end_time_sec = os::elapsedTime();
3007   _recorded_non_young_cset_choice_time_ms =
3008     (non_young_end_time_sec - non_young_start_time_sec) * 1000.0;
3009 }
3010 
3011 void G1CollectorPolicy_BestRegionsFirst::record_full_collection_end() {
3012   G1CollectorPolicy::record_full_collection_end();
3013   _collectionSetChooser->updateAfterFullCollection();
3014 }
3015 
3016 void G1CollectorPolicy_BestRegionsFirst::
3017 expand_if_possible(size_t numRegions) {
3018   size_t expansion_bytes = numRegions * HeapRegion::GrainBytes;
3019   _g1->expand(expansion_bytes);
3020 }
3021 
3022 void G1CollectorPolicy_BestRegionsFirst::
3023 record_collection_pause_end() {
3024   G1CollectorPolicy::record_collection_pause_end();
3025   assert(assertMarkedBytesDataOK(), "Marked regions not OK at pause end.");
3026 }