src/share/vm/gc/g1/g1CollectorPolicy.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/gc/g1

src/share/vm/gc/g1/g1CollectorPolicy.cpp

Print this page




1229 }
1230 
1231 void G1CollectorPolicy::report_ihop_statistics() {
1232   _ihop_control->print();
1233 }
1234 
1235 void G1CollectorPolicy::print_phases() {
1236   phase_times()->print();
1237 }
1238 
1239 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
1240                                                      double update_rs_processed_buffers,
1241                                                      double goal_ms) {
1242   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
1243   ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine();
1244 
1245   if (G1UseAdaptiveConcRefinement) {
1246     const int k_gy = 3, k_gr = 6;
1247     const double inc_k = 1.1, dec_k = 0.9;
1248 
1249     int g = cg1r->green_zone();
1250     if (update_rs_time > goal_ms) {
1251       g = (int)(g * dec_k);  // Can become 0, that's OK. That would mean a mutator-only processing.
1252     } else {
1253       if (update_rs_time < goal_ms && update_rs_processed_buffers > g) {
1254         g = (int)MAX2(g * inc_k, g + 1.0);
1255       }
1256     }
1257     // Change the refinement threads params
1258     cg1r->set_green_zone(g);
1259     cg1r->set_yellow_zone(g * k_gy);
1260     cg1r->set_red_zone(g * k_gr);
1261     cg1r->reinitialize_threads();
1262 
1263     int processing_threshold_delta = MAX2((int)(cg1r->green_zone() * _predictor.sigma()), 1);
1264     int processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta,
1265                                     cg1r->yellow_zone());
1266     // Change the barrier params
1267     dcqs.set_process_completed_threshold(processing_threshold);
1268     dcqs.set_max_completed_queue(cg1r->red_zone());
1269   }
1270 
1271   int curr_queue_size = dcqs.completed_buffers_num();
1272   if (curr_queue_size >= cg1r->yellow_zone()) {
1273     dcqs.set_completed_queue_padding(curr_queue_size);
1274   } else {
1275     dcqs.set_completed_queue_padding(0);
1276   }
1277   dcqs.notify_if_necessary();
1278 }
1279 
1280 size_t G1CollectorPolicy::predict_rs_length_diff() const {
1281   return get_new_size_prediction(_rs_length_diff_seq);
1282 }
1283 
1284 double G1CollectorPolicy::predict_alloc_rate_ms() const {
1285   return get_new_prediction(_alloc_rate_ms_seq);
1286 }
1287 
1288 double G1CollectorPolicy::predict_cost_per_card_ms() const {
1289   return get_new_prediction(_cost_per_card_ms_seq);
1290 }
1291 




1229 }
1230 
1231 void G1CollectorPolicy::report_ihop_statistics() {
1232   _ihop_control->print();
1233 }
1234 
1235 void G1CollectorPolicy::print_phases() {
1236   phase_times()->print();
1237 }
1238 
1239 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
1240                                                      double update_rs_processed_buffers,
1241                                                      double goal_ms) {
1242   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
1243   ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine();
1244 
1245   if (G1UseAdaptiveConcRefinement) {
1246     const int k_gy = 3, k_gr = 6;
1247     const double inc_k = 1.1, dec_k = 0.9;
1248 
1249     size_t g = cg1r->green_zone();
1250     if (update_rs_time > goal_ms) {
1251       g = (size_t)(g * dec_k);  // Can become 0, that's OK. That would mean a mutator-only processing.
1252     } else {
1253       if (update_rs_time < goal_ms && update_rs_processed_buffers > g) {
1254         g = (size_t)MAX2(g * inc_k, g + 1.0);
1255       }
1256     }
1257     // Change the refinement threads params
1258     cg1r->set_green_zone(g);
1259     cg1r->set_yellow_zone(g * k_gy);
1260     cg1r->set_red_zone(g * k_gr);
1261     cg1r->reinitialize_threads();
1262 
1263     size_t processing_threshold_delta = MAX2((int)(cg1r->green_zone() * _predictor.sigma()), 1);
1264     size_t processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta,
1265                                     cg1r->yellow_zone());
1266     // Change the barrier params
1267     dcqs.set_process_completed_threshold(processing_threshold);
1268     dcqs.set_max_completed_queue(cg1r->red_zone());
1269   }
1270 
1271   size_t curr_queue_size = dcqs.completed_buffers_num();
1272   if (curr_queue_size >= cg1r->yellow_zone()) {
1273     dcqs.set_completed_queue_padding(curr_queue_size);
1274   } else {
1275     dcqs.set_completed_queue_padding(0);
1276   }
1277   dcqs.notify_if_necessary();
1278 }
1279 
1280 size_t G1CollectorPolicy::predict_rs_length_diff() const {
1281   return get_new_size_prediction(_rs_length_diff_seq);
1282 }
1283 
1284 double G1CollectorPolicy::predict_alloc_rate_ms() const {
1285   return get_new_prediction(_alloc_rate_ms_seq);
1286 }
1287 
1288 double G1CollectorPolicy::predict_cost_per_card_ms() const {
1289   return get_new_prediction(_cost_per_card_ms_seq);
1290 }
1291 


src/share/vm/gc/g1/g1CollectorPolicy.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File