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);
|