< prev index next >

src/share/vm/gc/g1/g1CollectorPolicy.hpp

Print this page
rev 9402 : dihop-changes
rev 9404 : [mq]: erik-jmasa-review

*** 27,39 **** --- 27,41 ---- #include "gc/g1/collectionSetChooser.hpp" #include "gc/g1/g1CollectorState.hpp" #include "gc/g1/g1GCPhaseTimes.hpp" #include "gc/g1/g1InCSetState.hpp" + #include "gc/g1/g1InitialMarkToMixedTimeTracker.hpp" #include "gc/g1/g1MMUTracker.hpp" #include "gc/g1/g1Predictions.hpp" #include "gc/shared/collectorPolicy.hpp" + #include "utilities/pair.hpp" // A G1CollectorPolicy makes policy decisions that determine the // characteristics of the collector. Examples include: // * choice of collection set. // * when to collect.
*** 283,343 **** // The amount of allocated bytes in old gen during the last mutator and the following // young GC phase. size_t _last_old_allocated_bytes; ! // Used to track time from the end of initial mark to the first mixed GC. ! class InitialMarkToMixedTimeTracker { ! private: ! bool _active; ! double _initial_mark_end_time; ! double _mixed_start_time; ! double _total_pause_time; ! ! double wall_time() const { ! return _mixed_start_time - _initial_mark_end_time; ! } ! public: ! InitialMarkToMixedTimeTracker() { reset(); } ! ! void record_initial_mark_end(double end_time) { ! assert(!_active, "Initial mark out of order."); ! _initial_mark_end_time = end_time; ! _active = true; ! } ! ! void record_mixed_gc_start(double start_time) { ! if (_active) { ! _mixed_start_time = start_time; ! _active = false; ! } ! } ! ! double last_marking_time() { ! assert(has_result(), "Do not have all measurements yet."); ! double result = (_mixed_start_time - _initial_mark_end_time) - _total_pause_time; ! reset(); ! return result; ! } ! ! void reset() { ! _active = false; ! _total_pause_time = 0.0; ! _initial_mark_end_time = -1.0; ! _mixed_start_time = -1.0; ! } ! ! void add_pause(double time) { ! if (_active) { ! _total_pause_time += time; ! } ! } ! ! bool has_result() const { return _mixed_start_time > 0.0 && _initial_mark_end_time > 0.0; } ! }; ! ! InitialMarkToMixedTimeTracker _initial_mark_to_mixed; public: const G1Predictions& predictor() const { return _predictor; } // Add the given number of bytes to the total number of allocated bytes in the old gen. void add_last_old_allocated_bytes(size_t bytes) { _last_old_allocated_bytes += bytes; } --- 285,295 ---- // The amount of allocated bytes in old gen during the last mutator and the following // young GC phase. size_t _last_old_allocated_bytes; ! G1InitialMarkToMixedTimeTracker _initial_mark_to_mixed; public: const G1Predictions& predictor() const { return _predictor; } // Add the given number of bytes to the total number of allocated bytes in the old gen. void add_last_old_allocated_bytes(size_t bytes) { _last_old_allocated_bytes += bytes; }
*** 539,558 **** // determine whether we should initiate a new marking. double _cur_mark_stop_world_time_ms; double _mark_remark_start_sec; double _mark_cleanup_start_sec; ! void update_young_list_max_and_target_length(size_t* unbounded_target_length = NULL); ! void update_young_list_max_and_target_length(size_t rs_lengths, size_t* unbounded_target_length = NULL); // Update the young list target length either by setting it to the // desired fixed value or by calculating it using G1's pause // prediction model. If no rs_lengths parameter is passed, predict // the RS lengths using the prediction model, otherwise use the // given rs_lengths as the prediction. ! void update_young_list_target_length(); ! void update_young_list_target_length(size_t rs_lengths, size_t* unbounded_target_length = NULL); // Calculate and return the minimum desired young list target // length. This is the minimum desired young list length according // to the user's inputs. uint calculate_young_list_desired_min_length(uint base_min_length) const; --- 491,512 ---- // determine whether we should initiate a new marking. double _cur_mark_stop_world_time_ms; double _mark_remark_start_sec; double _mark_cleanup_start_sec; ! // Updates the internal young list maximum and target lengths. Returns the ! // unbounded young list target length. ! uint update_young_list_max_and_target_length(); ! uint update_young_list_max_and_target_length(size_t rs_lengths); // Update the young list target length either by setting it to the // desired fixed value or by calculating it using G1's pause // prediction model. If no rs_lengths parameter is passed, predict // the RS lengths using the prediction model, otherwise use the // given rs_lengths as the prediction. ! // Returns the unbounded young list target length. ! uint update_young_list_target_length(size_t rs_lengths); // Calculate and return the minimum desired young list target // length. This is the minimum desired young list length according // to the user's inputs. uint calculate_young_list_desired_min_length(uint base_min_length) const;
*** 571,581 **** uint calculate_young_list_target_length(size_t rs_lengths, uint base_min_length, uint desired_min_length, uint desired_max_length) const; ! uint bounded_young_list_target_length(size_t rs_lengths, size_t* unbounded_target_length = NULL) const; void update_rs_lengths_prediction(); void update_rs_lengths_prediction(size_t prediction); // Calculate and return chunk size (in number of regions) for parallel --- 525,538 ---- uint calculate_young_list_target_length(size_t rs_lengths, uint base_min_length, uint desired_min_length, uint desired_max_length) const; ! // Result of the bounded_young_list_target_length() method, containing both the ! // bounded as well as the unbounded young list target lengths in this order. ! typedef Pair<uint, uint, StackObj> YoungTargetLengths; ! YoungTargetLengths young_list_target_lengths(size_t rs_lengths) const; void update_rs_lengths_prediction(); void update_rs_lengths_prediction(size_t prediction); // Calculate and return chunk size (in number of regions) for parallel
< prev index next >