< prev index next >

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

Print this page
rev 11906 : [mq]: 8164936-age-table-print-wrong


 868   }
 869   return region_elapsed_time_ms;
 870 }
 871 
 872 bool G1DefaultPolicy::should_allocate_mutator_region() const {
 873   uint young_list_length = _g1->young_regions_count();
 874   uint young_list_target_length = _young_list_target_length;
 875   return young_list_length < young_list_target_length;
 876 }
 877 
 878 bool G1DefaultPolicy::can_expand_young_list() const {
 879   uint young_list_length = _g1->young_regions_count();
 880   uint young_list_max_length = _young_list_max_length;
 881   return young_list_length < young_list_max_length;
 882 }
 883 
 884 bool G1DefaultPolicy::adaptive_young_list_length() const {
 885   return _young_gen_sizer.adaptive_young_list_length();
 886 }
 887 









 888 void G1DefaultPolicy::update_max_gc_locker_expansion() {
 889   uint expansion_region_num = 0;
 890   if (GCLockerEdenExpansionPercent > 0) {
 891     double perc = (double) GCLockerEdenExpansionPercent / 100.0;
 892     double expansion_region_num_d = perc * (double) _young_list_target_length;
 893     // We use ceiling so that if expansion_region_num_d is > 0.0 (but
 894     // less than 1.0) we'll get 1.
 895     expansion_region_num = (uint) ceil(expansion_region_num_d);
 896   } else {
 897     assert(expansion_region_num == 0, "sanity");
 898   }
 899   _young_list_max_length = _young_list_target_length + expansion_region_num;
 900   assert(_young_list_target_length <= _young_list_max_length, "post-condition");
 901 }
 902 
 903 // Calculates survivor space parameters.
 904 void G1DefaultPolicy::update_survivors_policy() {
 905   double max_survivor_regions_d =
 906                  (double) _young_list_target_length / (double) SurvivorRatio;
 907   // We use ceiling so that if max_survivor_regions_d is > 0.0 (but
 908   // smaller than 1.0) we'll get 1.
 909   _max_survivor_regions = (uint) ceil(max_survivor_regions_d);
 910 
 911   _tenuring_threshold = _survivors_age_table.compute_tenuring_threshold(
 912       HeapRegion::GrainWords * _max_survivor_regions, _policy_counters);



 913 }
 914 
 915 bool G1DefaultPolicy::force_initial_mark_if_outside_cycle(GCCause::Cause gc_cause) {
 916   // We actually check whether we are marking here and not if we are in a
 917   // reclamation phase. This means that we will schedule a concurrent mark
 918   // even while we are still in the process of reclaiming memory.
 919   bool during_cycle = _g1->concurrent_mark()->cmThread()->during_cycle();
 920   if (!during_cycle) {
 921     log_debug(gc, ergo)("Request concurrent cycle initiation (requested by GC cause). GC cause: %s", GCCause::to_string(gc_cause));
 922     collector_state()->set_initiate_conc_mark_if_possible(true);
 923     return true;
 924   } else {
 925     log_debug(gc, ergo)("Do not request concurrent cycle initiation (concurrent cycle already in progress). GC cause: %s", GCCause::to_string(gc_cause));
 926     return false;
 927   }
 928 }
 929 
 930 void G1DefaultPolicy::initiate_conc_mark() {
 931   collector_state()->set_during_initial_mark_pause(true);
 932   collector_state()->set_initiate_conc_mark_if_possible(false);




 868   }
 869   return region_elapsed_time_ms;
 870 }
 871 
 872 bool G1DefaultPolicy::should_allocate_mutator_region() const {
 873   uint young_list_length = _g1->young_regions_count();
 874   uint young_list_target_length = _young_list_target_length;
 875   return young_list_length < young_list_target_length;
 876 }
 877 
 878 bool G1DefaultPolicy::can_expand_young_list() const {
 879   uint young_list_length = _g1->young_regions_count();
 880   uint young_list_max_length = _young_list_max_length;
 881   return young_list_length < young_list_max_length;
 882 }
 883 
 884 bool G1DefaultPolicy::adaptive_young_list_length() const {
 885   return _young_gen_sizer.adaptive_young_list_length();
 886 }
 887 
 888 size_t G1DefaultPolicy::desired_survivor_size() const {
 889   size_t const survivor_capacity = HeapRegion::GrainWords * _max_survivor_regions;
 890   return (size_t)((((double)survivor_capacity) * TargetSurvivorRatio) / 100);
 891 }
 892 
 893 void G1DefaultPolicy::print_age_table() {
 894   _survivors_age_table.print_age_table(_tenuring_threshold);
 895 }
 896 
 897 void G1DefaultPolicy::update_max_gc_locker_expansion() {
 898   uint expansion_region_num = 0;
 899   if (GCLockerEdenExpansionPercent > 0) {
 900     double perc = (double) GCLockerEdenExpansionPercent / 100.0;
 901     double expansion_region_num_d = perc * (double) _young_list_target_length;
 902     // We use ceiling so that if expansion_region_num_d is > 0.0 (but
 903     // less than 1.0) we'll get 1.
 904     expansion_region_num = (uint) ceil(expansion_region_num_d);
 905   } else {
 906     assert(expansion_region_num == 0, "sanity");
 907   }
 908   _young_list_max_length = _young_list_target_length + expansion_region_num;
 909   assert(_young_list_target_length <= _young_list_max_length, "post-condition");
 910 }
 911 
 912 // Calculates survivor space parameters.
 913 void G1DefaultPolicy::update_survivors_policy() {
 914   double max_survivor_regions_d =
 915                  (double) _young_list_target_length / (double) SurvivorRatio;
 916   // We use ceiling so that if max_survivor_regions_d is > 0.0 (but
 917   // smaller than 1.0) we'll get 1.
 918   _max_survivor_regions = (uint) ceil(max_survivor_regions_d);
 919 
 920   _tenuring_threshold = _survivors_age_table.compute_tenuring_threshold(desired_survivor_size());
 921   if (UsePerfData) {
 922     _policy_counters->tenuring_threshold()->set_value(_tenuring_threshold);
 923     _policy_counters->desired_survivor_size()->set_value(desired_survivor_size() * oopSize);
 924   }
 925 }
 926 
 927 bool G1DefaultPolicy::force_initial_mark_if_outside_cycle(GCCause::Cause gc_cause) {
 928   // We actually check whether we are marking here and not if we are in a
 929   // reclamation phase. This means that we will schedule a concurrent mark
 930   // even while we are still in the process of reclaiming memory.
 931   bool during_cycle = _g1->concurrent_mark()->cmThread()->during_cycle();
 932   if (!during_cycle) {
 933     log_debug(gc, ergo)("Request concurrent cycle initiation (requested by GC cause). GC cause: %s", GCCause::to_string(gc_cause));
 934     collector_state()->set_initiate_conc_mark_if_possible(true);
 935     return true;
 936   } else {
 937     log_debug(gc, ergo)("Do not request concurrent cycle initiation (concurrent cycle already in progress). GC cause: %s", GCCause::to_string(gc_cause));
 938     return false;
 939   }
 940 }
 941 
 942 void G1DefaultPolicy::initiate_conc_mark() {
 943   collector_state()->set_during_initial_mark_pause(true);
 944   collector_state()->set_initiate_conc_mark_if_possible(false);


< prev index next >