Mercurial > hg > graal-jvmci-8
comparison src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @ 751:20c6f43950b5
6490395: G1: Tidy up command line flags.
Summary: Change G1 flag names to be more consistent and disable some in 'product' mode.
Reviewed-by: tonyp, iveresov
author | johnc |
---|---|
date | Thu, 30 Apr 2009 15:07:53 -0700 |
parents | 96b229c54d1e |
children | 315a5d70b295 |
comparison
equal
deleted
inserted
replaced
748:51285b431bb2 | 751:20c6f43950b5 |
---|---|
134 | 134 |
135 _pending_cards_seq(new TruncatedSeq(TruncatedSeqLength)), | 135 _pending_cards_seq(new TruncatedSeq(TruncatedSeqLength)), |
136 _scanned_cards_seq(new TruncatedSeq(TruncatedSeqLength)), | 136 _scanned_cards_seq(new TruncatedSeq(TruncatedSeqLength)), |
137 _rs_lengths_seq(new TruncatedSeq(TruncatedSeqLength)), | 137 _rs_lengths_seq(new TruncatedSeq(TruncatedSeqLength)), |
138 | 138 |
139 _pause_time_target_ms((double) G1MaxPauseTimeMS), | 139 _pause_time_target_ms((double) MaxGCPauseMillis), |
140 | 140 |
141 // </NEW PREDICTION> | 141 // </NEW PREDICTION> |
142 | 142 |
143 _in_young_gc_mode(false), | 143 _in_young_gc_mode(false), |
144 _full_young_gcs(true), | 144 _full_young_gcs(true), |
218 _par_last_obj_copy_times_ms = new double[_parallel_gc_threads]; | 218 _par_last_obj_copy_times_ms = new double[_parallel_gc_threads]; |
219 | 219 |
220 _par_last_termination_times_ms = new double[_parallel_gc_threads]; | 220 _par_last_termination_times_ms = new double[_parallel_gc_threads]; |
221 | 221 |
222 // start conservatively | 222 // start conservatively |
223 _expensive_region_limit_ms = 0.5 * (double) G1MaxPauseTimeMS; | 223 _expensive_region_limit_ms = 0.5 * (double) MaxGCPauseMillis; |
224 | 224 |
225 // <NEW PREDICTION> | 225 // <NEW PREDICTION> |
226 | 226 |
227 int index; | 227 int index; |
228 if (ParallelGCThreads == 0) | 228 if (ParallelGCThreads == 0) |
247 _non_young_other_cost_per_region_ms_seq->add( | 247 _non_young_other_cost_per_region_ms_seq->add( |
248 non_young_other_cost_per_region_ms_defaults[index]); | 248 non_young_other_cost_per_region_ms_defaults[index]); |
249 | 249 |
250 // </NEW PREDICTION> | 250 // </NEW PREDICTION> |
251 | 251 |
252 double time_slice = (double) G1TimeSliceMS / 1000.0; | 252 double time_slice = (double) GCPauseIntervalMillis / 1000.0; |
253 double max_gc_time = (double) G1MaxPauseTimeMS / 1000.0; | 253 double max_gc_time = (double) MaxGCPauseMillis / 1000.0; |
254 guarantee(max_gc_time < time_slice, | 254 guarantee(max_gc_time < time_slice, |
255 "Max GC time should not be greater than the time slice"); | 255 "Max GC time should not be greater than the time slice"); |
256 _mmu_tracker = new G1MMUTrackerQueue(time_slice, max_gc_time); | 256 _mmu_tracker = new G1MMUTrackerQueue(time_slice, max_gc_time); |
257 _sigma = (double) G1ConfidencePerc / 100.0; | 257 _sigma = (double) G1ConfidencePercent / 100.0; |
258 | 258 |
259 // start conservatively (around 50ms is about right) | 259 // start conservatively (around 50ms is about right) |
260 _concurrent_mark_init_times_ms->add(0.05); | 260 _concurrent_mark_init_times_ms->add(0.05); |
261 _concurrent_mark_remark_times_ms->add(0.05); | 261 _concurrent_mark_remark_times_ms->add(0.05); |
262 _concurrent_mark_cleanup_times_ms->add(0.20); | 262 _concurrent_mark_cleanup_times_ms->add(0.20); |
263 _tenuring_threshold = MaxTenuringThreshold; | 263 _tenuring_threshold = MaxTenuringThreshold; |
264 | 264 |
265 if (G1UseSurvivorSpace) { | 265 if (G1UseSurvivorSpaces) { |
266 // if G1FixedSurvivorSpaceSize is 0 which means the size is not | 266 // if G1FixedSurvivorSpaceSize is 0 which means the size is not |
267 // fixed, then _max_survivor_regions will be calculated at | 267 // fixed, then _max_survivor_regions will be calculated at |
268 // calculate_young_list_target_config during initialization | 268 // calculate_young_list_target_config during initialization |
269 _max_survivor_regions = G1FixedSurvivorSpaceSize / HeapRegion::GrainBytes; | 269 _max_survivor_regions = G1FixedSurvivorSpaceSize / HeapRegion::GrainBytes; |
270 } else { | 270 } else { |
449 | 449 |
450 void G1CollectorPolicy::calculate_young_list_target_config(size_t rs_lengths) { | 450 void G1CollectorPolicy::calculate_young_list_target_config(size_t rs_lengths) { |
451 guarantee( adaptive_young_list_length(), "pre-condition" ); | 451 guarantee( adaptive_young_list_length(), "pre-condition" ); |
452 | 452 |
453 double start_time_sec = os::elapsedTime(); | 453 double start_time_sec = os::elapsedTime(); |
454 size_t min_reserve_perc = MAX2((size_t)2, (size_t)G1MinReservePerc); | 454 size_t min_reserve_perc = MAX2((size_t)2, (size_t)G1MinReservePercent); |
455 min_reserve_perc = MIN2((size_t) 50, min_reserve_perc); | 455 min_reserve_perc = MIN2((size_t) 50, min_reserve_perc); |
456 size_t reserve_regions = | 456 size_t reserve_regions = |
457 (size_t) ((double) min_reserve_perc * (double) _g1->n_regions() / 100.0); | 457 (size_t) ((double) min_reserve_perc * (double) _g1->n_regions() / 100.0); |
458 | 458 |
459 if (full_young_gcs() && _free_regions_at_end_of_collection > 0) { | 459 if (full_young_gcs() && _free_regions_at_end_of_collection > 0) { |
1107 _short_lived_surv_rate_group->stop_adding_regions(); | 1107 _short_lived_surv_rate_group->stop_adding_regions(); |
1108 size_t short_lived_so_length = _young_list_so_prefix_length; | 1108 size_t short_lived_so_length = _young_list_so_prefix_length; |
1109 _short_lived_surv_rate_group->record_scan_only_prefix(short_lived_so_length); | 1109 _short_lived_surv_rate_group->record_scan_only_prefix(short_lived_so_length); |
1110 tag_scan_only(short_lived_so_length); | 1110 tag_scan_only(short_lived_so_length); |
1111 | 1111 |
1112 if (G1UseSurvivorSpace) { | 1112 if (G1UseSurvivorSpaces) { |
1113 _survivors_age_table.clear(); | 1113 _survivors_age_table.clear(); |
1114 } | 1114 } |
1115 | 1115 |
1116 assert( verify_young_ages(), "region age verification" ); | 1116 assert( verify_young_ages(), "region age verification" ); |
1117 } | 1117 } |
1824 _pending_cards_seq->add((double) _pending_cards); | 1824 _pending_cards_seq->add((double) _pending_cards); |
1825 _scanned_cards_seq->add((double) cards_scanned); | 1825 _scanned_cards_seq->add((double) cards_scanned); |
1826 _rs_lengths_seq->add((double) _max_rs_lengths); | 1826 _rs_lengths_seq->add((double) _max_rs_lengths); |
1827 | 1827 |
1828 double expensive_region_limit_ms = | 1828 double expensive_region_limit_ms = |
1829 (double) G1MaxPauseTimeMS - predict_constant_other_time_ms(); | 1829 (double) MaxGCPauseMillis - predict_constant_other_time_ms(); |
1830 if (expensive_region_limit_ms < 0.0) { | 1830 if (expensive_region_limit_ms < 0.0) { |
1831 // this means that the other time was predicted to be longer than | 1831 // this means that the other time was predicted to be longer than |
1832 // than the max pause time | 1832 // than the max pause time |
1833 expensive_region_limit_ms = (double) G1MaxPauseTimeMS; | 1833 expensive_region_limit_ms = (double) MaxGCPauseMillis; |
1834 } | 1834 } |
1835 _expensive_region_limit_ms = expensive_region_limit_ms; | 1835 _expensive_region_limit_ms = expensive_region_limit_ms; |
1836 | 1836 |
1837 if (PREDICTIONS_VERBOSE) { | 1837 if (PREDICTIONS_VERBOSE) { |
1838 gclog_or_tty->print_cr(""); | 1838 gclog_or_tty->print_cr(""); |
2091 _recent_prev_end_times_for_all_gcs_sec->add(end_time_sec); | 2091 _recent_prev_end_times_for_all_gcs_sec->add(end_time_sec); |
2092 _prev_collection_pause_end_ms = end_time_sec * 1000.0; | 2092 _prev_collection_pause_end_ms = end_time_sec * 1000.0; |
2093 } | 2093 } |
2094 | 2094 |
2095 double G1CollectorPolicy::recent_avg_time_for_pauses_ms() { | 2095 double G1CollectorPolicy::recent_avg_time_for_pauses_ms() { |
2096 if (_recent_pause_times_ms->num() == 0) return (double) G1MaxPauseTimeMS; | 2096 if (_recent_pause_times_ms->num() == 0) return (double) MaxGCPauseMillis; |
2097 else return _recent_pause_times_ms->avg(); | 2097 else return _recent_pause_times_ms->avg(); |
2098 } | 2098 } |
2099 | 2099 |
2100 double G1CollectorPolicy::recent_avg_time_for_CH_strong_ms() { | 2100 double G1CollectorPolicy::recent_avg_time_for_CH_strong_ms() { |
2101 if (_recent_CH_strong_roots_times_ms->num() == 0) | 2101 if (_recent_CH_strong_roots_times_ms->num() == 0) |
2102 return (double)G1MaxPauseTimeMS/3.0; | 2102 return (double)MaxGCPauseMillis/3.0; |
2103 else return _recent_CH_strong_roots_times_ms->avg(); | 2103 else return _recent_CH_strong_roots_times_ms->avg(); |
2104 } | 2104 } |
2105 | 2105 |
2106 double G1CollectorPolicy::recent_avg_time_for_G1_strong_ms() { | 2106 double G1CollectorPolicy::recent_avg_time_for_G1_strong_ms() { |
2107 if (_recent_G1_strong_roots_times_ms->num() == 0) | 2107 if (_recent_G1_strong_roots_times_ms->num() == 0) |
2108 return (double)G1MaxPauseTimeMS/3.0; | 2108 return (double)MaxGCPauseMillis/3.0; |
2109 else return _recent_G1_strong_roots_times_ms->avg(); | 2109 else return _recent_G1_strong_roots_times_ms->avg(); |
2110 } | 2110 } |
2111 | 2111 |
2112 double G1CollectorPolicy::recent_avg_time_for_evac_ms() { | 2112 double G1CollectorPolicy::recent_avg_time_for_evac_ms() { |
2113 if (_recent_evac_times_ms->num() == 0) return (double)G1MaxPauseTimeMS/3.0; | 2113 if (_recent_evac_times_ms->num() == 0) return (double)MaxGCPauseMillis/3.0; |
2114 else return _recent_evac_times_ms->avg(); | 2114 else return _recent_evac_times_ms->avg(); |
2115 } | 2115 } |
2116 | 2116 |
2117 int G1CollectorPolicy::number_of_recent_gcs() { | 2117 int G1CollectorPolicy::number_of_recent_gcs() { |
2118 assert(_recent_CH_strong_roots_times_ms->num() == | 2118 assert(_recent_CH_strong_roots_times_ms->num() == |
2195 res = MIN2(res, 1.0); | 2195 res = MIN2(res, 1.0); |
2196 return res; | 2196 return res; |
2197 } | 2197 } |
2198 | 2198 |
2199 size_t G1CollectorPolicy::expansion_amount() { | 2199 size_t G1CollectorPolicy::expansion_amount() { |
2200 if ((int)(recent_avg_pause_time_ratio() * 100.0) > G1GCPct) { | 2200 if ((int)(recent_avg_pause_time_ratio() * 100.0) > G1GCPercent) { |
2201 // We will double the existing space, or take G1ExpandByPctOfAvail % of | 2201 // We will double the existing space, or take |
2202 // the available expansion space, whichever is smaller, bounded below | 2202 // G1ExpandByPercentOfAvailable % of the available expansion |
2203 // by a minimum expansion (unless that's all that's left.) | 2203 // space, whichever is smaller, bounded below by a minimum |
2204 // expansion (unless that's all that's left.) | |
2204 const size_t min_expand_bytes = 1*M; | 2205 const size_t min_expand_bytes = 1*M; |
2205 size_t reserved_bytes = _g1->g1_reserved_obj_bytes(); | 2206 size_t reserved_bytes = _g1->g1_reserved_obj_bytes(); |
2206 size_t committed_bytes = _g1->capacity(); | 2207 size_t committed_bytes = _g1->capacity(); |
2207 size_t uncommitted_bytes = reserved_bytes - committed_bytes; | 2208 size_t uncommitted_bytes = reserved_bytes - committed_bytes; |
2208 size_t expand_bytes; | 2209 size_t expand_bytes; |
2209 size_t expand_bytes_via_pct = | 2210 size_t expand_bytes_via_pct = |
2210 uncommitted_bytes * G1ExpandByPctOfAvail / 100; | 2211 uncommitted_bytes * G1ExpandByPercentOfAvailable / 100; |
2211 expand_bytes = MIN2(expand_bytes_via_pct, committed_bytes); | 2212 expand_bytes = MIN2(expand_bytes_via_pct, committed_bytes); |
2212 expand_bytes = MAX2(expand_bytes, min_expand_bytes); | 2213 expand_bytes = MAX2(expand_bytes, min_expand_bytes); |
2213 expand_bytes = MIN2(expand_bytes, uncommitted_bytes); | 2214 expand_bytes = MIN2(expand_bytes, uncommitted_bytes); |
2214 if (G1PolicyVerbose > 1) { | 2215 if (G1PolicyVerbose > 1) { |
2215 gclog_or_tty->print("Decided to expand: ratio = %5.2f, " | 2216 gclog_or_tty->print("Decided to expand: ratio = %5.2f, " |
2589 } | 2590 } |
2590 | 2591 |
2591 // Calculates survivor space parameters. | 2592 // Calculates survivor space parameters. |
2592 void G1CollectorPolicy::calculate_survivors_policy() | 2593 void G1CollectorPolicy::calculate_survivors_policy() |
2593 { | 2594 { |
2594 if (!G1UseSurvivorSpace) { | 2595 if (!G1UseSurvivorSpaces) { |
2595 return; | 2596 return; |
2596 } | 2597 } |
2597 if (G1FixedSurvivorSpaceSize == 0) { | 2598 if (G1FixedSurvivorSpaceSize == 0) { |
2598 _max_survivor_regions = _young_list_target_length / SurvivorRatio; | 2599 _max_survivor_regions = _young_list_target_length / SurvivorRatio; |
2599 } else { | 2600 } else { |
2849 | 2850 |
2850 // Add the heap region to the collection set and return the conservative | 2851 // Add the heap region to the collection set and return the conservative |
2851 // estimate of the number of live bytes. | 2852 // estimate of the number of live bytes. |
2852 void G1CollectorPolicy:: | 2853 void G1CollectorPolicy:: |
2853 add_to_collection_set(HeapRegion* hr) { | 2854 add_to_collection_set(HeapRegion* hr) { |
2854 if (G1TraceRegions) { | 2855 if (G1PrintRegions) { |
2855 gclog_or_tty->print_cr("added region to cset %d:["PTR_FORMAT", "PTR_FORMAT"], " | 2856 gclog_or_tty->print_cr("added region to cset %d:["PTR_FORMAT", "PTR_FORMAT"], " |
2856 "top "PTR_FORMAT", young %s", | 2857 "top "PTR_FORMAT", young %s", |
2857 hr->hrs_index(), hr->bottom(), hr->end(), | 2858 hr->hrs_index(), hr->bottom(), hr->end(), |
2858 hr->top(), (hr->is_young()) ? "YES" : "NO"); | 2859 hr->top(), (hr->is_young()) ? "YES" : "NO"); |
2859 } | 2860 } |