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




1306 }
1307 
1308 void G1CollectorPolicy::report_ihop_statistics() {
1309   _ihop_control->print();
1310 }
1311 
1312 void G1CollectorPolicy::print_phases() {
1313   phase_times()->print();
1314 }
1315 
1316 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
1317                                                      double update_rs_processed_buffers,
1318                                                      double goal_ms) {
1319   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
1320   ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine();
1321 
1322   if (G1UseAdaptiveConcRefinement) {
1323     const int k_gy = 3, k_gr = 6;
1324     const double inc_k = 1.1, dec_k = 0.9;
1325 
1326     int g = cg1r->green_zone();
1327     if (update_rs_time > goal_ms) {
1328       g = (int)(g * dec_k);  // Can become 0, that's OK. That would mean a mutator-only processing.
1329     } else {
1330       if (update_rs_time < goal_ms && update_rs_processed_buffers > g) {
1331         g = (int)MAX2(g * inc_k, g + 1.0);
1332       }
1333     }
1334     // Change the refinement threads params
1335     cg1r->set_green_zone(g);
1336     cg1r->set_yellow_zone(g * k_gy);
1337     cg1r->set_red_zone(g * k_gr);
1338     cg1r->reinitialize_threads();
1339 
1340     int processing_threshold_delta = MAX2((int)(cg1r->green_zone() * _predictor.sigma()), 1);
1341     int processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta,
1342                                     cg1r->yellow_zone());
1343     // Change the barrier params
1344     dcqs.set_process_completed_threshold(processing_threshold);
1345     dcqs.set_max_completed_queue(cg1r->red_zone());
1346   }
1347 
1348   int curr_queue_size = dcqs.completed_buffers_num();
1349   if (curr_queue_size >= cg1r->yellow_zone()) {
1350     dcqs.set_completed_queue_padding(curr_queue_size);
1351   } else {
1352     dcqs.set_completed_queue_padding(0);
1353   }
1354   dcqs.notify_if_necessary();
1355 }
1356 
1357 size_t G1CollectorPolicy::predict_rs_length_diff() const {
1358   return get_new_size_prediction(_rs_length_diff_seq);
1359 }
1360 
1361 double G1CollectorPolicy::predict_alloc_rate_ms() const {
1362   return get_new_prediction(_alloc_rate_ms_seq);
1363 }
1364 
1365 double G1CollectorPolicy::predict_cost_per_card_ms() const {
1366   return get_new_prediction(_cost_per_card_ms_seq);
1367 }
1368 




1306 }
1307 
1308 void G1CollectorPolicy::report_ihop_statistics() {
1309   _ihop_control->print();
1310 }
1311 
1312 void G1CollectorPolicy::print_phases() {
1313   phase_times()->print();
1314 }
1315 
1316 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time,
1317                                                      double update_rs_processed_buffers,
1318                                                      double goal_ms) {
1319   DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
1320   ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine();
1321 
1322   if (G1UseAdaptiveConcRefinement) {
1323     const int k_gy = 3, k_gr = 6;
1324     const double inc_k = 1.1, dec_k = 0.9;
1325 
1326     size_t g = cg1r->green_zone();
1327     if (update_rs_time > goal_ms) {
1328       g = (size_t)(g * dec_k);  // Can become 0, that's OK. That would mean a mutator-only processing.
1329     } else {
1330       if (update_rs_time < goal_ms && update_rs_processed_buffers > g) {
1331         g = (size_t)MAX2(g * inc_k, g + 1.0);
1332       }
1333     }
1334     // Change the refinement threads params
1335     cg1r->set_green_zone(g);
1336     cg1r->set_yellow_zone(g * k_gy);
1337     cg1r->set_red_zone(g * k_gr);
1338     cg1r->reinitialize_threads();
1339 
1340     size_t processing_threshold_delta = MAX2<size_t>(cg1r->green_zone() * _predictor.sigma(), 1);
1341     size_t processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta,
1342                                     cg1r->yellow_zone());
1343     // Change the barrier params
1344     dcqs.set_process_completed_threshold(processing_threshold);
1345     dcqs.set_max_completed_queue(cg1r->red_zone());
1346   }
1347 
1348   size_t curr_queue_size = dcqs.completed_buffers_num();
1349   if (curr_queue_size >= cg1r->yellow_zone()) {
1350     dcqs.set_completed_queue_padding(curr_queue_size);
1351   } else {
1352     dcqs.set_completed_queue_padding(0);
1353   }
1354   dcqs.notify_if_necessary();
1355 }
1356 
1357 size_t G1CollectorPolicy::predict_rs_length_diff() const {
1358   return get_new_size_prediction(_rs_length_diff_seq);
1359 }
1360 
1361 double G1CollectorPolicy::predict_alloc_rate_ms() const {
1362   return get_new_prediction(_alloc_rate_ms_seq);
1363 }
1364 
1365 double G1CollectorPolicy::predict_cost_per_card_ms() const {
1366   return get_new_prediction(_cost_per_card_ms_seq);
1367 }
1368 


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