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




1285 }
1286 
1287 void G1CollectorPolicy::report_ihop_statistics() {
1288   _ihop_control->print();
1289 }
1290 
1291 void G1CollectorPolicy::print_phases() {
1292   phase_times()->print();
1293 }
1294 
1295 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
1296                                                      double update_rs_processed_buffers,
1297                                                      double goal_ms) {
1298   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
1299   ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine();
1300 
1301   if (G1UseAdaptiveConcRefinement) {
1302     const int k_gy = 3, k_gr = 6;
1303     const double inc_k = 1.1, dec_k = 0.9;
1304 
1305     int g = cg1r->green_zone();
1306     if (update_rs_time > goal_ms) {
1307       g = (int)(g * dec_k);  // Can become 0, that's OK. That would mean a mutator-only processing.
1308     } else {
1309       if (update_rs_time < goal_ms && update_rs_processed_buffers > g) {
1310         g = (int)MAX2(g * inc_k, g + 1.0);
1311       }
1312     }
1313     // Change the refinement threads params
1314     cg1r->set_green_zone(g);
1315     cg1r->set_yellow_zone(g * k_gy);
1316     cg1r->set_red_zone(g * k_gr);
1317     cg1r->reinitialize_threads();
1318 
1319     int processing_threshold_delta = MAX2((int)(cg1r->green_zone() * _predictor.sigma()), 1);
1320     int processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta,
1321                                     cg1r->yellow_zone());
1322     // Change the barrier params
1323     dcqs.set_process_completed_threshold(processing_threshold);
1324     dcqs.set_max_completed_queue(cg1r->red_zone());
1325   }
1326 
1327   int curr_queue_size = dcqs.completed_buffers_num();
1328   if (curr_queue_size >= cg1r->yellow_zone()) {
1329     dcqs.set_completed_queue_padding(curr_queue_size);
1330   } else {
1331     dcqs.set_completed_queue_padding(0);
1332   }
1333   dcqs.notify_if_necessary();
1334 }
1335 
1336 size_t G1CollectorPolicy::predict_rs_length_diff() const {
1337   return get_new_size_prediction(_rs_length_diff_seq);
1338 }
1339 
1340 double G1CollectorPolicy::predict_alloc_rate_ms() const {
1341   return get_new_prediction(_alloc_rate_ms_seq);
1342 }
1343 
1344 double G1CollectorPolicy::predict_cost_per_card_ms() const {
1345   return get_new_prediction(_cost_per_card_ms_seq);
1346 }
1347 




1285 }
1286 
1287 void G1CollectorPolicy::report_ihop_statistics() {
1288   _ihop_control->print();
1289 }
1290 
1291 void G1CollectorPolicy::print_phases() {
1292   phase_times()->print();
1293 }
1294 
1295 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
1296                                                      double update_rs_processed_buffers,
1297                                                      double goal_ms) {
1298   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
1299   ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine();
1300 
1301   if (G1UseAdaptiveConcRefinement) {
1302     const int k_gy = 3, k_gr = 6;
1303     const double inc_k = 1.1, dec_k = 0.9;
1304 
1305     size_t g = cg1r->green_zone();
1306     if (update_rs_time > goal_ms) {
1307       g = (size_t)(g * dec_k);  // Can become 0, that's OK. That would mean a mutator-only processing.
1308     } else {
1309       if (update_rs_time < goal_ms && update_rs_processed_buffers > g) {
1310         g = (size_t)MAX2(g * inc_k, g + 1.0);
1311       }
1312     }
1313     // Change the refinement threads params
1314     cg1r->set_green_zone(g);
1315     cg1r->set_yellow_zone(g * k_gy);
1316     cg1r->set_red_zone(g * k_gr);
1317     cg1r->reinitialize_threads();
1318 
1319     size_t processing_threshold_delta = MAX2<size_t>(cg1r->green_zone() * _predictor.sigma(), 1);
1320     size_t processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta,
1321                                     cg1r->yellow_zone());
1322     // Change the barrier params
1323     dcqs.set_process_completed_threshold((int)processing_threshold);
1324     dcqs.set_max_completed_queue((int)cg1r->red_zone());
1325   }
1326 
1327   size_t curr_queue_size = dcqs.completed_buffers_num();
1328   if (curr_queue_size >= cg1r->yellow_zone()) {
1329     dcqs.set_completed_queue_padding(curr_queue_size);
1330   } else {
1331     dcqs.set_completed_queue_padding(0);
1332   }
1333   dcqs.notify_if_necessary();
1334 }
1335 
1336 size_t G1CollectorPolicy::predict_rs_length_diff() const {
1337   return get_new_size_prediction(_rs_length_diff_seq);
1338 }
1339 
1340 double G1CollectorPolicy::predict_alloc_rate_ms() const {
1341   return get_new_prediction(_alloc_rate_ms_seq);
1342 }
1343 
1344 double G1CollectorPolicy::predict_cost_per_card_ms() const {
1345   return get_new_prediction(_cost_per_card_ms_seq);
1346 }
1347 


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